Forum » Programiranje » [C++]Težavna while zanka
[C++]Težavna while zanka
RKP_95 ::
Pozdravljeni!
Pri programiranju kalkulatorja sem naletel na težavo. V eni izmed while zank pride do težave. Potem ko bi se morala zanka zaradi neizpolnjevanja pogojev prekiniti, se vedno izvede še enkrat in se potem prekine. Morda kdo ve zakaj?
Zanka:
Primer:
Program v delu polju Equasion[Position] najde '+', zato med drugim pokliče funkcijo Proccess(). Funkcije se izvede in med tem nastavi Position (ki je globalna spremenljivka) na takšno vrednost, pri kateri je Equasion[Position]==0. Ko se proces vrne v zgornjo while zanko, se kljub temu, da je Equasion[Position] nič, izvede še enkrat in v konzolo izpiše Imppossible. Potem se prekine, kar kaže na to, da je Equasion[Position] res nič, ker bi se drugače zanka še nadaljevala, ker pred in za izpisom besedila Impossible v konzolo, program ne spremeni vrednosti int Position.
Upam, da sem bil glede problema dovolj jasen. Nisem vključil še ostalega dela programske kode, ker se mi pri problemu ne zdi pomembna. Poskusil sem že vse s to zanko, zato sem prepričan, da je problem v njej in ne kje drugje.
Lep pozdrav,
Dejan
Pri programiranju kalkulatorja sem naletel na težavo. V eni izmed while zank pride do težave. Potem ko bi se morala zanka zaradi neizpolnjevanja pogojev prekiniti, se vedno izvede še enkrat in se potem prekine. Morda kdo ve zakaj?
Zanka:
while(Equasion[Position]!=0&&Position<MAXNUM) { if(Equasion[Position]=='0'||Equasion[Position]=='1'|| Equasion[Position]=='2'||Equasion[Position]=='3'|| Equasion[Position]=='4'||Equasion[Position]=='5'|| Equasion[Position]=='6'||Equasion[Position]=='7'|| Equasion[Position]=='8'||Equasion[Position]=='9') { Result=Result+ProccessNumbers(); } if(Equasion[Position]=='+') { Position++; Result=Result+Proccess(); } if(Equasion[Position]=='-') { Position++; Result=Result-Proccess(); } if(Equasion[Position]=='/') { Position++; Result=Result/Proccess(); } if(Equasion[Position]=='*') { Position++; Result=Result*Proccess(); } if(Equasion[Position]==0) { cout << "impossible" << endl; } else { cout << "Error 1" << endl; Position++; return 0; } }
Primer:
Program v delu polju Equasion[Position] najde '+', zato med drugim pokliče funkcijo Proccess(). Funkcije se izvede in med tem nastavi Position (ki je globalna spremenljivka) na takšno vrednost, pri kateri je Equasion[Position]==0. Ko se proces vrne v zgornjo while zanko, se kljub temu, da je Equasion[Position] nič, izvede še enkrat in v konzolo izpiše Imppossible. Potem se prekine, kar kaže na to, da je Equasion[Position] res nič, ker bi se drugače zanka še nadaljevala, ker pred in za izpisom besedila Impossible v konzolo, program ne spremeni vrednosti int Position.
Upam, da sem bil glede problema dovolj jasen. Nisem vključil še ostalega dela programske kode, ker se mi pri problemu ne zdi pomembna. Poskusil sem že vse s to zanko, zato sem prepričan, da je problem v njej in ne kje drugje.
Lep pozdrav,
Dejan
darkkk ::
In kateri mehanizem naj bi ti preprečil to, da se ti if(... == 0) ne bi izvedel? Sej si sam nastail vrednost na tako, da se ti izvede.
Kar maš gor je
Poleg tega, kjer imaš več odvisnosti od ene vrednosti več različnih izidov, se splača uporabiti switch/case stavke z breaki.
Neglede na to, kaj in kako vrednost bo mel tvoj pos / equation[pos], če boš imel breake noter, boš izvedel natanko en case stavek.
Kar maš gor je
if(x=='+'){ //do something x = 0; } if(x==0){ cout<<"impossible"; }
Poleg tega, kjer imaš več odvisnosti od ene vrednosti več različnih izidov, se splača uporabiti switch/case stavke z breaki.
char ch = Equation[pos]; switch(ch){ case '+':{ //dowhatever break; ... default:{ break; } } }
Neglede na to, kaj in kako vrednost bo mel tvoj pos / equation[pos], če boš imel breake noter, boš izvedel natanko en case stavek.
smoke ::
Te zanke jaz sicer ne bi tako napisal, ampak koda dela tako kot mora. Zanka se ne izvede še enkrat, ampak ko pride ven iz tega if-a:
Gre preverjat še vse ostale ki so za njim. In ko pride do tistega ki preverja ali je Equation[Position] enak 0, seveda izpiše "impossible". Če tega nočeš, preoblikuj if stavke takole:
if(Equasion[Position]=='+') { Position++; Result=Result+Proccess(); }
Gre preverjat še vse ostale ki so za njim. In ko pride do tistega ki preverja ali je Equation[Position] enak 0, seveda izpiše "impossible". Če tega nočeš, preoblikuj if stavke takole:
while(Equasion[Position]!=0&&Position<MAXNUM) { if(Equasion[Position]=='0'||Equasion[Position]=='1'|| Equasion[Position]=='2'||Equasion[Position]=='3'|| Equasion[Position]=='4'||Equasion[Position]=='5'|| Equasion[Position]=='6'||Equasion[Position]=='7'|| Equasion[Position]=='8'||Equasion[Position]=='9') { Result=Result+ProccessNumbers(); } else if(Equasion[Position]=='+') { Position++; Result=Result+Proccess(); } else if(Equasion[Position]=='-') { Position++; Result=Result-Proccess(); } else if(Equasion[Position]=='/') { Position++; Result=Result/Proccess(); } else if(Equasion[Position]=='*') { Position++; Result=Result*Proccess(); } else if(Equasion[Position]==0) { cout << "impossible" << endl; } else { cout << "Error 1" << endl; Position++; return 0; } }
RKP_95 ::
Hvala.
Problem je bil torej v tem, da sem predvideval, da ko program izbere en if izmed večih potem več ne preverja, ali tudi drugi ustrezajo pogojem. Očitno se še nikoli nisem srečal s takim primerom...
Problem je bil torej v tem, da sem predvideval, da ko program izbere en if izmed večih potem več ne preverja, ali tudi drugi ustrezajo pogojem. Očitno se še nikoli nisem srečal s takim primerom...
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Java pomočOddelek: Programiranje | 1802 (1581) | Serial |
» | [c++]file read problemOddelek: Programiranje | 1586 (1321) | 'FireSTORM' |
» | zacetniska vprasanja pri Visual Basicu 6Oddelek: Programiranje | 1681 (1432) | mte |
» | CFileDIalogOddelek: Programiranje | 754 (707) | Imortales |
» | Perl vprašanje.Oddelek: Programiranje | 1282 (1020) | ABX |