2017-11-08 16 views
2

Ich soll einen kurzen C-Code schreiben, wo ich eine Zufallszahl zwischen 1 und 6 erzeuge, wenn ich "zufällig" eintippe. Wenn ich "exit" oder "quit" eintippe, muss das Programm enden. "Beenden" und "Beenden" funktionieren, aber nichts passiert, wenn ich "zufällig" eingebe.if-Anweisung mit Zeichenfolge vergleichen in C

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

int main() { 
    printf("enter your command"); 
    char input[100]; 
    fgets(input, 100, stdin); 

    if (strcmp(input, "quit") == 0){ 
     exit(0); 
    } else if (strcmp(input, "exit") == 0) { 
     exit(0); 
    } else if (strcmp(input, "random") == 0) { 
     srand(time(NULL)); 
     int random_number = rand() %7; 
     printf("%d\n",random_number);  
    } 
    return 0; 
} 
+0

Ein einfacher Schritt ein 'else {printf hinzuzufügen wäre ("Huh? Got [% s] \ n", Eingabe); } am Ende, was dir zeigen würde, was passiert ist. Außerdem funktionieren weder Ihre 'exit'- noch' quit'-Vergleiche. Das Programm wird automatisch beendet, wenn sie fehlschlagen. Sie können dies sehen, indem Sie 'printf (" Got quit [% s] \ n ", Eingabe),' vor dem 'exit (0)' für 'quit' und ähnlich für' exit' hinzufügen. Sie könnten dies auch sehen, wenn Sie den Code mit einem Debugger ausführen. –

+0

Willkommen bei Stack Overflow - obwohl Sie schon eine Weile hier sind. Bitte beachten Sie, dass die bevorzugte Art zu sagen "Danke" hier ist durch Up-Voting gute Fragen und hilfreiche Antworten (sobald Sie genug Ruf zu tun haben), und durch die Annahme der hilfreichsten Antwort auf alle Fragen Sie fragen (Das gibt Ihnen auch einen kleinen Schub für Ihre Ruf). Bitte lesen Sie die [Über] Seite und auch [Wie stelle ich Fragen? hier?] (Http://stackoverflow.com/help/how-to-ask) und [Was mache ich, wenn jemand meine Frage beantwortet ?] (http://stackoverflow.com/help/someone-answers) –

Antwort

4

Sie benötigen die Zeilenendmarke '\n' zu entfernen, die von fgets auf den String lesen angehängt werden kann.

Zum Beispiel

char input[100]; 
input[0] = '\0'; 

if (fgets (input, 100, stdin)) 
{ 
    input[strcspn(input, "\n")] = '\0'; 
} 

berücksichtigen, dass die initializer in dieser Erklärung

int random_number = rand() %7; 

erzeugt Zahlen im Bereich [0, 6]. Wenn Sie den Bereich benötigen [1, 6] dann sollte die initializer aussehen

int random_number = rand() %6 + 1; 

Und nach der C-Standard die Funktion main ohne Parameter werden wie

int main(void) 
+0

Guter Punkt mit der Reichweite und clever 'strcspn'! – sidyll

3

Ihr fgets Aufruf deklariert werden wird, um den eingefügten Befehl Lesen Plus die Newline am Ende. Sie sollten also auch mit dem Zeilenumbruch vergleichen oder eine andere Eingabemethode wählen (z. B. scanf verwenden, die nützlich ist, um mit Leerstellen umzugehen oder den Zeilenumbruch selbst zu entfernen).

strcmp(input, "quit\n") == 0 
strcmp(input, "exit\n") == 0 
strcmp(input, "random\n") == 0 

Das haben Sie mit den ersten beiden Befehlen nicht bemerkt, aber sie haben den Test auch nicht bestanden.

Sie könnten auch eine endgültige else hinzufügen, um etwas zu greifen, das nicht übereinstimmt. Nur dass zu verändern (ohne Zeilenumbrüche zu tun) würde beweisen, dass die anderen nicht so gut passen:

/* ... */ 
} else { 
    printf("unknown command\n"); 
} 

Ein Beispiel unter Verwendung von scanf:

char input[101]; 
scanf(" %100s", input); /* discards any leading whitespace and 
         * places the next non-whitespace sequence 
         * in `input` */ 
+0

Danke mein Freund :) Und ein großes Lob, dass ich meinen Fehler mit Zufallszahlen bemerkt habe Ich sollte tatsächlich Zufallszahlen zwischen 1 - 6 bekommen. – JangoCG

Verwandte Themen