2012-03-31 46 views
0

我想要在C中的一個程序,我必須要求用戶一定的乘法問題,我使用rand()來生成數字。如何在每次我的程序循環時生成一個新號碼?

如果用戶得到的答案錯了,那麼他們將被要求一旦得到它的權利,以重新進入,當他們得到它的權利,方案應該循環並詢問用戶不同的問題。
每次將2個隨機值傳遞給該函數時,我正在使用單獨的函數來生成答案。

我的問題是,一旦我得到的答案正確,程序循環,問同樣的問題,它選擇相同的號碼!那麼如何讓它每次循環時都會選擇一個不同的數字?

#include <stdio.h> 

int multiply(int x, int y); 

int main() 
{ 
    srand (time(NULL)); 
    int x = rand()%20; 
    int y = rand()%20; 
    int i, answer; 
    i = multiply(x,y); 

    do { 
     printf("what is %d multiplied by %d?:", x, y); 
     scanf("%d", &answer); 

     while(answer != i) 
     { 
      printf("wrong try again!"); 
      scanf("%d", &answer); 
     } 

     printf("very good!\n"); 
    } while(i==answer); 

} 

int multiply(int x, int y) 
{ 
    int k; 
    k=x*y; 
    return k; 
} 
+0

你的事情是在錯誤的地方!如果在'srand'後面, – 2012-03-31 10:52:10

回答

3

您需要的xy的任務移動到循環。這樣他們將在每一輪中獲得新的價值。事實上,你可以在其中移動他們的整個定義。

此外,循環條件while(i==answer)是多餘的,因爲在那一點上它總是會是真的。爲了清楚起見,你應該用true來替代它,以明確它是一個無限循環。 (您可能希望用一種方式擴展程序,例如,如果輸入'q'或輸入空字符串 - 但我會將其作爲練習留給:-)。

while(true) { 
    int x = rand()%20; 
    int y = rand()%20; 
    int i, answer; 
    i = multiply(x,y); 

    printf("what is %d multiplied by %d?:", x, y); 
    scanf("%d", &answer); 

    while(answer != i) 
    { 
    printf("wrong try again!"); 
    scanf("%d", &answer); 
    } 

    printf("very good!\n"); 
} 
+0

即時獲得這些錯誤 multi.c:函數'main': multi.c:26:10:錯誤:'我'未申報(首次在此函數中使用) multi.c:26 :10:注意:每個未聲明的標識符僅在其出現的每個函數中報告一次 multi.c:26:13:錯誤:'answer'未聲明(首次在此函數中使用) – user1304516 2012-03-31 10:53:50

+0

我移動了i的聲明並回答了外部,現在它工作正常。謝謝:) – user1304516 2012-03-31 10:55:17

+0

@ user1304516,對不起,這是一個遺漏。看到我更新的代碼示例,它也解決了這個問題。 – 2012-03-31 10:58:37

0

抽象地,你的邏輯應該是這樣的:

// seed random number generator 

while (true) // ask infinitely many questions 
{ 
    int x, y, expected_result; // populate randomly 

    printf("Please compute the result of %d and %d: ", x, y); 

    while (read_answer() != expected_result) 
    { 
     printf("Sorry, wrong answer. Try again: "); 
    } 
} 

也就是說,對於每一個問題你產生新的參數。

您只需要將read_answer()作爲幫助函數從輸入中讀取一個整數,例如,使用fgetsstrtol

相關問題