2017-02-18 3 views
0

Ich versuche, ein Quiz-Programm, liest Fragen aus einer Datei und Antworten aus einer anderen Datei, setzen sie in Strings und vergleichen Sie sie mit strcmp(), aber aus irgendeinem Grund funktioniert es nicht, wenn ich setze In einer richtigen Antwort heißt es, es sei nicht korrekt. Jede Hilfe wäre willkommen.strcmp() im Programm funktioniert nicht

My-Code

int main() 
{ 

    FILE *fpq = fopen("questions.txt", "r"); 
    FILE *fpa = fopen("answers.txt", "r"); 

    char question[256]; 
    char answer[256]; 
    char user_input[256]; 

    fgets(question, 256, fpq); 
    fgets(answer, 256, fpa); 

    puts(question); 
    fgets(user_input, 256, stdin); 
    if(strcmp(user_input, answer) == 0) 
    { 
     printf("Good job!\n"); 
    } 
    else 
    { 
     printf("Nope its:\n"); 
     puts(answer); 
    } 
    fclose(fpq); 
    fclose(fpa); 
    return 0; 
} 
+0

Wie Buchhaltung Sie Zeilenumbrüche für Hinter? http://StackOverflow.com/a/28462221/636009 –

+2

Die einzige richtige Antwort ist: Verwenden Sie einen Debugger. –

+0

Kompilieren Sie alle Warnungen und Debug-Informationen ('gcc -Wall -g'). Dann ** benutze den Debugger ** ('gdb') –

Antwort

1

fgets() anhängt eine neue Zeile \n Zeichen an das Ende der Zeichenfolge in den Puffer gelesen.
auf diese Antwort finden, die es weiter erläutern werden Is trailing newline necessary in fgets?

Vielleicht ist es Dies ist der Grund, warum der Code nicht funktioniert, überprüfen Sie bitte für die neue Linie am Ende der Schnur und entfernen.

Beim Entfernen von newline \n Zeichen können Sie sich auf Removing trailing newline character from fgets() input beziehen.

Auch diese Frage behandelt die gleichen Probleme wie Ihre strcmp not working. Es wäre eine gute Hilfe für dich.

Und wie Paul Oglive sagte im Kommentar lernen, Debugger zu verwenden, wird es immer helfen.

+0

Ok ich werde nachschlagen, wie man einen Debugger benutzt, danke für deinen Rat. – emp

+0

Funktioniert die Antwort für Sie? –

+0

@emp Auch müssen die oben genannten Fragen und Antworten zu sehen, es wird Ihnen wirklich sehr helfen, und ein gutes Buch wie [C Programmierung eines modernen Ansatzes von KN König 2. Ausgabe] (https://www.amazon.com/ C-Programmierung-Modern-Approach-2nd/dp/0393979504 /). –

-1

Sie können strncmp verwenden, um Ihr Problem zu lösen. Sie müssen die Anzahl der zu vergleichenden Zeichen angeben.

if(strncmp(user_input, answer, strlen(user_input) == 0) 
{ 
    printf("Good job!\n"); 
} 
else 
{ 
    printf("Nope its:\n"); 
    puts(answer); 
} 

See-example-here