2017-10-10 18 views
0

checkQuestion機能で何が問題なのかを解明しようとしています。私は理由を知らないが、時には特定の質問をチェックしたり、それらを完全にスキップしたりすることはありません。私は関数createQuestionを作成し、にcheckQuestionを呼び出しました。それで、すべてが混乱する原因になっているかどうかわかりません。どのような助けをいただければ幸いですか、何が間違っているかについての手がかりが必要です。私はあなたがそれを実行したいならば、プログラムへのリンクを投稿しました。チェック機能が動作しません

https://repl.it/MQsD/142

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

    int main(void) { 

    srand(time(NULL)); 
    printf("Math quiz. \n"); 
    printf("This is level 1. There are a total of 10 questions. \n\n"); 

    createQuestion(); 
    checkQuestion(); 

    } 

//Functions 

int integers(void) { 

    int digit; 
    digit = rand() % 10; 

    return digit; 

} 

char operations(void) { 

    int digit; 
    digit = rand() % 4; 

    if (digit == 0) { 

    return '+'; 

    } else if (digit == 1) { 

    return '-'; 

    } else if (digit == 2) { 

    return '*'; 

    } else if (digit == 3) { 

    return '/'; 
    } 

} 

int createQuestion(void) { 

    int i; 
    int count = 0; 
    int answer; 
    int sum; 

    for (i = 1; i <= 10; i++) { 

    count++; 
    printf("%d)%d", count, integers()); 
    printf("%c", operations()); 
    printf("%d", integers()); 
    printf("="); 
    scanf("%f", & answer); 
    checkQuestion(integers(), integers(), operations(), answer); 

    } 
} 

void checkQuestion(float a, float b, float c, char d) { //a integer b integer c answer //d operator 

    int answer1; 
    int answer2; 
    int answer3; 
    int answer4; 

    if (operations() == '+') { 

    answer1 == a + b; 
    answer1 == c; 
    if (answer1 == c) { 

     return messagesGood(); 

    } else { 

     return messagesBad(); 

    } 

    } else if (operations() == '-') { 

    answer2 = a - b; 

    if (answer2 == c) { 

     return messagesGood(); 

    } else { 

     return messagesBad(); 

    } 

    } else if (operations() == '*') { 

    answer3 = a * b; 

    if (answer3 == c) { 

     return messagesGood(); 

    } else { 

     return messagesBad(); 

    } 

    } else if (operations() == '/') { 

    answer4 = a * b; 

    if (answer4 == c) { 

     return messagesGood(); 

    } else { 

     return messagesBad(); 

    } 
    } 

} 

void messagesGood(void) { 

    int digit; 
    digit = rand() % 4; 

    switch (digit) { 

    case 0: 
    printf("Very good! \n"); 
    break; 

    case 1: 
    printf("Excellent! \n"); 
    break; 

    case 2: 
    printf("Nice Work! \n"); 
    break; 

    case 3: 
    printf("Keep up the good work! \n"); 
    break; 
    } 
} 

void messagesBad(void) { 

    int digit; 
    digit = rand() % 4; 

    switch (digit) { 

    case 0: 
    printf("No. Please try again. \n"); 
    break; 

    case 1: 
    printf("Wrong. Try once more. \n"); 
    break; 

    case 2: 
    printf("Don’t give up! \n"); 
    break; 

    case 3: 
    printf("No. Keep trying. \n"); 
    break; 
    } 
} 
+1

見て、とても素敵です。 2つのこと。 'integer()'関数は毎回ランダムな整数を返します。ですから、あなたが 'printf'で質問をしたときに呼び出すときに、' checkQuestion'に引数を渡すためにそれを呼び出すとき、それは両方に対して同じ整数と思いますか?第2に、 'checkQuestion'で' answer1'を評価する際に、 '==' vs '='を使用して混乱してしまいます。 – ncke

答えて

1

あなたがoperationsを呼び出すたびに、あなたは異なる結果を得ることができます。あなたの条件でdと比較する必要があります。operatorに対してではありません。 にも同様の問題があります。checkQuestionに渡される内容は、おそらくユーザーに表示されたものではありません。例えば

は:一つ奇妙なことがある

if (d == '+') { 
    // ... 
} 
+0

ありがとう!私はそれを変更しましたが、今はメッセージを受け取っていません。何が起こったのか把握しようとしています。 – Neo

+0

はい、 'createQuestion()'で 'integers()'を呼び出すときと同じ問題です。 – ncke

0

、あなたが文字を返す関数があります。

**char** operations(void){ 
    etc... 
} 

を、あなたはfloatを期待する関数に入れます

checkQuestion(integers(), integers(), **operations()**, answer); 
void checkQuestion(float a, float b, **float c**, char d) 
+0

ありがとう!私は答えがあったところで作業を書く間違いをしました。 – Neo

関連する問題