2016-04-11 9 views
-7

Ich habe dieses Witz-Programm mit String vergleichen, aber wenn ich "ja" tippe, gibt es auch was ich für die else Anweisung habe. Es tut dies nicht, wenn ich "nein" eintippe und vorhersagbar reagiert, wenn ich etwas anderes als "ja" oder "nein" eintippe.strcmp stoppt nicht beim Eingeben von 'ja' Befehl

#include<stdio.h> 
#include<string.h> 

int main() 
{ 
    char ansr[50]; 
    printf("Are you a cop?"); 
    scanf("%s", &ansr); 

    if (strcmp(ansr, "yes") == 0) 
    { 
     printf("Then get outta here buddy!"); 
    } 

    if (strcmp(ansr, "no") == 0) 
    { 
     printf("Then you can learn the secret handshake!"); 
    } 
    else 
     printf("\nDude! Yes or no question! Are you a cop?!\n"); 
} 
+3

ersetzen 'if (strcmp (ANSR, "nein") == 0)' 'mit else if (strcmp (ANSR, "nein") == 0)' –

+7

Am Ich vermisse, wo Sie "Ansr" auf etwas einstellen? –

+0

Einrückung/Formatierung. Weiter ... –

Antwort

-1

Ihr Code hat einen, wenn Block und einen, wenn auch Block. Also vergleicht sie ansr zweimal, ändere es wenn wenn sonst blockieren würde, wird es nur einmal prüfen.

#include<stdio.h> 
#include<string.h> 

int main() 
{ 

char ansr[50]; 
printf("Are you a cop?"); 
//should take input here 
if (strcmp(ansr, "yes") == 0) 
{ 
    printf("Then get outta here buddy!"); 
} 

else if (strcmp(ansr, "no") == 0) 
{ 
    printf("Then you can learn the secret handshake!"); 
} 

else printf("\nDude! Yes or no question! Are you a cop?!\n"); 

return 0; 
} 

Bearbeiten: Entfernt einige Wörter wie vorgeschlagen. Entschuldigung, habe sie aus dem Op-Code eingefügt.

+1

Einrückung und Formatierung, bitte BTW: return statement – 4386427

2

ansr bleibt uninitialisiert, bevor es über strcmp() berührt, letztere ruft das berüchtigte undefinierte Verhalten auf, alles kann passieren.

3

Es gibt ein paar Dinge zu beachten. Erstens, Sie verwenden nie scanf, um alles in ansr vor der Verwendung zu lesen, was zu undefiniertem Verhalten führt. Zweitens, wie andere gesagt haben, sind Ihre if/else Aussagen nicht kongruent. Drittens benötigen Sie eine while Schleife, um die Frage erneut zu stellen, wenn die Antwort ungültig ist. Man könnte es wie so neu ordnen:

int main() 
{ 
    char ansr[50]; 
    printf("Are you a cop?\n"); 
    scanf("%49s", ansr); 

    while (strcmp(ansr, "yes") && strcmp(ansr, "no")) 
    { 
     printf("\nDude! Yes or no question! Are you a cop?!\n"); 
     scanf("%49s", ansr); 
    } 

    if (strcmp(ansr, "yes") == 0) 
    { 
     printf("Then get outta here buddy!\n"); 
    } 
    else 
    { 
     printf("Then you can learn the secret handshake!\n"); 
    } 

    return 0; 
} 
+0

Wenn Sie hier scannen, sagen Sie dem Scanner das Limit: 'scanf ("% 49s ", ...'. – alk

+0

Und was ist mit einer Do-While-Schleife? – alk

+0

@alk Danke, ich Der Scan wurde korrigiert. Warum eine Do-While verwenden? Nicht sicher, was Sie meinen. Die Nachricht ändert sich. – vestlen

Verwandte Themen