2017-02-18 6 views
0

1つのファイルからの質問を読み込んで別のファイルからの回答を文字列に入れてstrcmp()と比較するクイズプログラムを作成しようとしていますが、正解では正しくないと言います。どんな助けもありがとう。プログラム内のstrcmp()は動作しません

マイコード

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

どのように改行を末尾を占めていますか? http://stackoverflow.com/a/28462221/636009 –

+2

唯一正しい答えは:デバッガを使用することです。 –

+0

すべての警告とデバッグ情報( 'gcc -Wall -g')でコンパイルしてください。次に**デバッガを使用する**( 'gdb') –

答えて

1

fgets()は、バッファに読み込む文字列の最後に改行\n文字を追加します。
はさらにそれをIs trailing newline necessary in fgets?

を説明します多分これはあなたのコードが動作しない理由でこの答えを参照してください、文字列の末尾に新しい行をチェックし、それを削除してください。

改行を削除する\n文字は、Removing trailing newline character from fgets() inputを参照してください。

この質問は、あなたと同じ問題を扱いますstrcmp not working。それはあなたに良い助けになるでしょう。

そして、Paul Ogliveとしてコメントに記載されているデバッガを使用することを学ぶ、それは常に役に立ちます。

+0

Okデバッガの使い方を見ていきます。 – emp

+0

答えはあなたのために働いていますか? –

+0

@empまた、上記の質問と回答を見る必要があります。それは本当にたくさんのことを助け、[Cプログラミングの近代的なアプローチBy KN King 2nd Edition](https://www.amazon.com/ C-Programming-Modern-Approach-2nd/dp/0393979504 /)を参照してください。 –

-1

strncmpを使用して問題を解決することができます。比較する文字数を指定する必要があります。

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

See-example-here

関連する問題