Das ! ändert nichts an der Compilier-Beschwerde, hab ich schon probierts. Und reingetan hab ichs deswegen, weil die drei Zeichen eben nicht mitgezählt werden sollen.
Ich habe es so angeschrieben:
if(mode == 'c'){
while((item = fgetc(fp)) != EOF){
switch(item){
case '\0': ;
break;
case ' ': ;
break;
case '
': ;
break;
default: cc++;
}
Das ! hat schon Einfluß darauf. Man könnte grundsätzlich sagen: Das geht bei switch eben nicht. Etwas… „fundierter“ würde klingen: Jeder Wert != 0 wird in C als ‚true‘ angesehen, und !true gibt ‚false‘ - also 0. Wenn die Ausrufezeichen dastehen, hat er also vermutlich zwei mal eine 0 dort stehen (und einmal einen Wert != 0, weil 0 ja false ist, und durch das ! zu einem Wert wird, der nicht 0 ist - zu welchem auch immer … vermutlich 0xFFFFFFFF ).
Das hier…
[QUOTE=Evgeni]Hi!
if(mode == 'c'){
while((item = fgetc(fp)) != EOF){
switch(item){
case '\0': ;
break;
case ' ': ;
break;
case '
': ;
break;
default: cc++;
}
[/QUOTE]
Müßte aber funktionieren - zumindest schluckt der gcc das bei mir anstandslos - oder eben
switch(item){
case '\0': //line 23
case ' ':
case '
': //line 27
break;
default: cc++;
}
Im Notfall hast du … (es geht ja nur um drei Werte) … ja immernoch die Option
if (item!=’\0’ && item!=’ ’ && item!=’
') cc++;
Ich hatt mal ein ähnliches Problem unter Windows. Ursache war, dass am Anfang der Datei ein unsichtbares Steuerzeichen stand, welches meinen Parser ständig auf Fehler laufen ließ. Die Datei mit einem Hex-Editor betrachten bringt Klarheit, was wirklich drin steht.