Archief - [PROG][C++] code execue probleem

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Marbug

Legacy Member
ik ben vandaag is begonnen met een klein jah hoe moet ik het zeggen programmatje(?) te schrijven, maar ik kwam dan opene probleem ... als ik pos alseen int (ook bij de if dus) gebruik werkt alles goed, maar als ik char geruik dan doet hij niets ...
Code:
#include <iostream>
using namespace std;

int main()
{
int pos_x=0,pos_y=0;
const int MAX_CHAR = 5;
char pos[MAX_CHAR];

char go_up[MAX_CHAR]= "up";
char go_down[MAX_CHAR]= "down";

cout << "up voor naar boven, down voor naar beneden" << endl;

	while(pos != 0)
	{
		cin >> pos;

		if(pos == go_up){
			pos_y++;
		}
		else if(pos == go_down){
			pos_y--;
		}
		cout << "positie x-as: " << pos_x << endl;
		cout << "positie y-as: " << pos_y << endl;
	}

return 0;
}
Zoals ik dus al zei is dit men eerste code die ik schrijf in C++ dus niet te hard reageren als er erge dingens in staan :p
Het probleem zit dus bij die if's ik heb bena 2 uur verschillende combinaties geprobeerd maar ik heb gene oplossing gevonden.
btw, als iemand ook zo'n voorbeeld kan geven maar dan ipv at ge up of down tijpt dat ge gewoon op de noppen up of down op u toetsenbord druk en om te quitten u exit knop drukt.
/me is nog altijd aan het zoeken (help)

killgore

Legacy Member
Code:
do
{
    cout << "up voor naar boven, down voor naar beneden." << endl;
    cin >> pos;
    if(pos == go_up){
	 pos_y++;
    }
    else if(pos == go_down){
         pos_y--;
    }
    else pos = 0;
    cout << "positie x-as: " << pos_x << endl;
    cout << "positie y-as: " << pos_y << endl;
} while(pos!=0);

beter is om via een stop character te werken, bv. s, en pos daarmee te vergelijken:
Code:
do
{
    cout << "up voor naar boven, down voor naar beneden, s om te stoppen." << endl;
    cin >> pos;
    if(pos == go_up){
	 pos_y++;
    }
    else if(pos == go_down){
         pos_y--;
    }
    cout << "positie x-as: " << pos_x << endl;
    cout << "positie y-as: " << pos_y << endl;
} while(pos[0]!='s');

Marbug

Legacy Member
nu heb ik nog altijd het probleem dat als ik zelfs up of down invul dat er niets gebeurd, en als ik veel chars ingeef, dan krijg ik ene waarde, want niet echt klopt he? (maar deze problemen had ik dus al) :sad:

Tassadar

Legacy Member
Je vergelijkt pointers met elkaar. Daarom dat ze nooit gelijk worden aan elkaar, ze wijzen elk naar een apart stuk geheugen.

Waarom je wel iets krijgt als je veel characters intypt: je hebt een buffer overflow error: alle characters van de array zijn opgevuld, en toevallig liggen de variabelen voor positie daarachter en worden mee overschreven.

killgore

Legacy Member
Tassadar zei:
Je vergelijkt pointers met elkaar. Daarom dat ze nooit gelijk worden aan elkaar, ze wijzen elk naar een apart stuk geheugen.

Waarom je wel iets krijgt als je veel characters intypt: je hebt een buffer overflow error: alle characters van de array zijn opgevuld, en toevallig liggen de variabelen voor positie daarachter en worden mee overschreven.
ik had eigenlijk alleen naar de stop sequentie gekeken, ma nu ge het zegt, das idd ook fout :p

Marbug

Legacy Member
ik heb het eindelijk gevondne en ht lukt zonder fout :)
Code:
#include <iostream>
#include <string>
using namespace std;

int pos_x=0,pos_y=0;
string pos;
 
string go_up= "up";
string go_down= "down";
string go_left= "left";
string go_right= "right";
string stop= "quit";

int main()
{
cout << "up voor naar boven, down voor naar beneden quit om te stoppen" << endl;
 
        while(pos!= stop)
        {
                cin >> pos;
 
                if(pos == go_up){
                        pos_y++;
                }
                else if(pos == go_down){
                        pos_y--;
                }
                else if(pos == go_left){
                        pos_x--;
                }
                else if(pos == go_right){
                        pos_x++;
                }
                cout << "positie x-as: " << pos_x << endl;
                cout << "positie y-as: " << pos_y << endl;
 
        }
 
return 0;
}

CyBeRRaT

Legacy Member
Marbug zei:
ik heb het eindelijk gevondne en ht lukt zonder fout :)

misschien een tip. gebruik zoveel mogelijk het string type ipv array[char]. dat laatste kan echt voor problemen zorgen als je niet 100% weet wat je doet. dat geldt eigenlijk altijd voor array. je kan beter de stl gebruiken. vector trekt hard op een array. je leert veel beter daarmee werken volgens mijn mening dan met een (overgebleven C restant als) array

wlibaers

Legacy Member
CyBeRRaT zei:
misschien een tip. gebruik zoveel mogelijk het string type ipv array[char]. dat laatste kan echt voor problemen zorgen als je niet 100% weet wat je doet. dat geldt eigenlijk altijd voor array. je kan beter de stl gebruiken. vector trekt hard op een array. je leert veel beter daarmee werken volgens mijn mening dan met een (overgebleven C restant als) array

Het komt er eigenlijk op neer dat je C arrays niet goed kan gebruiken als je pointers niet goed begrijpt (en C strings zijn arrays). En om echt goed door te hebben wat pointers doen is een beetje kennis van hoe de machinetaal ineen zit wel heel nuttig.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan