2016-12-06 4 views
-4

Wenn ich eine if/else Anweisung die letzte else hat eine rote Unterstreichung, und ich debuggte dieses Programm, hieß es else ist nicht mit einem if gepaart.Wie kann ich das tun, wenn else Anweisung?

/*문자 출력 프로그램*/ 

#include <stdio.h> 

int main(void) 

{ 

char R, T, C, op; 

    printf("문자를 입력하시오:\n"); 
    { 
     if (R) 
      scanf_s("%c", &R, sizeof(R)); 
     printf("Rectangular"); 

     if (T) 
      scanf_s("%c", &T, sizeof(T)); 
     printf("Triangle"); 

     if (C) 
      scanf_s("%c", &C, sizeof(C)); 
     printf("Circle"); 

     else (op == !!R, T, C); 
    scanf_s("%c", &op, sizeof(op)); 
    } 

    printf("Unknown"); 

    return 0; 
} 
+2

Sie fehlt '{}', z. B.:. 'if (C) { scanf_s ("% c", & C, Größevon (C)); printf ("Kreis");} ' –

+5

' (op == !! R, T, C) 'ist, er, _novel_ .. Bitte heben Sie ein Lehrbuch auf und nicht zufällig Hacking von Stack Overflow. –

+2

Neben den guten Informationen, die Sie unten haben, ist Ihr allererster Test falsch: 'if (R)' - Sie haben R an dieser Stelle keinen Wert gegeben, so dass der Test bedeutungslos ist und das Programm alles kann (nicht nur "führe entweder die then-Klausel aus, noch führe sie aus" - * anything *.) –

Antwort

2

Wenn Ihr if keine Klammern hat { }, es wird nur die erste Aussage berücksichtigen, wenn die Ausführung. Da dein if mehr als eins hat, wird das else nicht funktionieren, weil es nicht nach einem if mehr geht.

tun:

if (C) 
{ 
    scanf_s("%c", &C, sizeof(C)); 
    printf("Circle"); 
} 
else 
{ 
    (op == !!R, T, C); 
    scanf_s("%c", &op, sizeof(op)); 
} 
2

Der Fehler auf der else ganz richtig ist, eigentlich. Hinzufügen von Klammern zu zeigen, was der Compiler sieht:

if (C) { 
    scanf_s("%c", &C, sizeof(C)); 
} 
printf("Circle"); 

// Now this else is really without a corresponding if 
else (op == !!R, T, C); 

Als allgemeine Regel sollten Sie Klammern verwenden, um explizit zu machen, was gehört zu denen bedingte Anweisung. In Ihrem Fall wollten Sie wahrscheinlich den Aufruf printf in den Block der if-Anweisung aufnehmen.

Beachten Sie auch, dass Ihr else hat eine ganz eigene Erklärung:

(op == !!R, T, C); 

Während diese Rechts ist, ist es nicht wirklich bedeuten nichts. Im besten Fall ist es eine Übung, um den Leser zu verwirren (abgesehen von irgendwelchen komischen Makro-Erweiterungen). Heck, ich konnte nicht einmal anfangen zu interpretieren, was du damit denkst .

+1

Ich denke, die Absicht war, einen Buchstaben in 'op' zu lesen und dann zu vergleichen, if (op == 'R')' usw. so ist der Code wirklich sehr weit von der richtigen entfernt ... der 'printf' sagt:" Bitte eingeben ein Brief". –

0

Wie alle hier bereits erwähnt haben, fehlen Ihnen die geschweiften Klammern, um das ifs mit dem else zu verbinden. Außerdem glaube ich nicht, dass diese Seite deine Hausaufgaben für dich machen sollte. Aber hier ist ein Überblick darüber, was Sie wahrscheinlich selbst programmieren sollten!

char input; 

// print request for user input (printf) 

// read user input (scanf) 

// check if user input represents a rectangle, then triangle, then circle, else unknown. 
if(input == 'R') { 
    // rectangle 
} else if (input == 'T') { 
    // triangle 
} else if (input == 'C') { 
    // circle 
} else { 
    // unknown 
} 
0

Wie Phiter und Joey antwortete {} ist das Problem der Fehlermeldung über else.

Und else brauchen keine Bedingungen. Ihr Code sieht aus wie Sie „bestimmt, wenn der Eingang nicht R, T noch C ist, erneut scannen, nicht wahr?

else bedeutet‚Fall, dass diese Bedingung nicht mit der über alle if Bedingungen‘angepasst wurde, so brauchen Sie nicht zu . Schreib Zustand

Wie auch immer, vor allem, so scheint es gesamte Programm Problem hat Lesen Sie Ihre Lehrbuch wieder, und E-Mail zu Ihrem TA