C - If wird geskippt / It skips 1 if everytime?

...komplette Frage anzeigen

6 Antworten

Wenn man mit else if arbeitet, wird immer das erst passendste genommen.

Bei
if (xb==0){...}
else if (xb==0){...}
printf("Hi");

wird in die erste if Verzweigt, da dass das erst beste ist, nachdem dieser Anweiungsblock ausgeführt wurde, wird printf ausgeführt.

In Wotlauten:
Wenn xb gleich 0, mach das. Sonst wenn xb gleich 0, mach das andere. Dieses Sonst stört hier etwas, da das Erste passt, braucht das else if gar nicht erst geprüft werden.

Wenn du möchtest, dass beides ausgeführt wird, dann hast du folgende mögliche Möglichkeiten:

1) if (xb==o){...}
if (xb==0){...}

So wird zwingend die zweite if geprüft. Denn hier gibt es kein sonst (else) mehr.

2) if (xb==0){
if (yb==0){...}
else if (yb==1){...}
}
Es reicht, xb einmal abzufragen ob es 0 ist, also kann man innerhalb eines Blockes alles unterkriegen und muss nicht zweimal, das gleiche prüfen (es sei denn xb ändert sich; ist hier aber nicht ersichtlich)

Did du understand das?

Did du understand das?

A: I become a cheeseburger.

B: German?

A: No, cheeseburger!

;)

3

Wir sind hier auf einer deutschsprachigen Plattform, dein englisch ist nicht wirklich gut und anhand deiner anderen Fragen sieht man, dass du deutsch kannst. Schreib die Frage lieber auf deutsch und versuch, den Quelltext ein bisschen zu strukturieren, mit Leerzeilen und so. ;)

Dann klappt es auch mit den Antworten. Ich kann programmieren, aber ich verstehe nicht wirklich, was du mit der Frage ausdrücken willst. 

Okay, you want it in english, you'll get it in english...

In the first "if" you check, if "xb" equals 0, which it does.

Then in the inner "if" you check, if "yb" equals 0, which it does not.

That's the end of that part.

But now you do an "else if", which means "if the previous if's expression (on the same level) returned false, then (and only then) do this check".

That results in something like this:

  1. Check, if xb equals 0.
  2. If yes, do things, described here.
  3. If xb did not equal 0, check, if xb equals 0.
  4. If yes, do things, described here.

In other words:

What you did is equivalent to "If there's no milk in the fridge, check, if there are no eggs. But if there was milk in the fridge, check, if there is no milk in the fridge, if that's the case, check, if there is exactly one egg."

But since there is no milk, the case, where there is milk, does never occur...

"Solution": Remove that "else"...

P.S.: Okay, i know, that since some date in the not so distant past, questions written in english are not a violation of "da rulez ;)" anymore, but your english "sounds" like you'd better stick to german...

I think it's also worth to notice, that the questioner's code can be simplified:

if (xb == 0) {

if (yb == 0) {

print("both zero");

}

else {

print("xb is zero, yb not");

}

}

That way he or she avoids repetations and it's much clearer to understand what the code does. 

Anyways, thanks for the clarification, now I can see what Fl4shw4rrior's problem was. 

1

Schreib die frage doch auf deutsch ._. Du kommst doch aus Österreich..

Zum problem: das else steht im weg. Eigentlich doch logisch.

why not turn on your debugger and see in what stage your variables have the values which decide the course of the program.

if you don't know how to use the debugger, try simply visualize your values with printf()

Moin (hello),

1: if(0==xb)
2: {
3:      if(0==yb){;}
4: }
5: else if(0==xb)
6: {
7:      if(1==yb){;}
8: }

That does not make sense: You get into line 5 if condition line 1 is not true. But condition 5 is the same condition as in line 1. So, if you get condition line 1, the programm won't reach condition line 5. If you don't fullfil condition line 1, you will reach line 5, but it is the same condition, so this condition can not be true when reached! When the condition line 1 and 5 is true, line 1 prevents line 5, so no line 7. When condition line 1 and 5 is not true, you don't reach line 7, so never line 7 is done!

You will find the solution in the comment of ceevee or here (if this is what you want to get):

1: if(0==xb)
2: {
3:      if(0==yb){ /* code for xb==0 && yb==0*/}
4:      else if(1==yb){/* code for xb==0 && yb==1*/}
5:      else {/* code for xb==0 && yb!=0 && yb!=1*/}
6: } else {/* code for xb!=0}

For further questions please don't hesitate to ask gutefrage.net       

Was möchtest Du wissen?