» »

[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:
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
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:
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...

RKP_95 ::

Sem preoblikoval if stavke in ta problem je rešen. Hvala še enkrat. :D


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Java pomoč

Oddelek: Programiranje
131802 (1581) Serial
»

[c++]file read problem

Oddelek: Programiranje
151586 (1321) 'FireSTORM'
»

zacetniska vprasanja pri Visual Basicu 6

Oddelek: Programiranje
111681 (1432) mte
»

CFileDIalog

Oddelek: Programiranje
5754 (707) Imortales
»

Perl vprašanje.

Oddelek: Programiranje
171282 (1020) ABX

Več podobnih tem