2013-10-20 47 views
-1

我正在嘗試創建一個遊戲,其中使用1和9之間的數字的乘法問題會被重複詢問,直到有人犯錯。當他們錯誤時,程序應該顯示「oops」。C++隨機化和循環困難

我的代碼:

#include <iostream> 
#include <time.h> 
#include <stdlib.h> 
#include <string.h> 

using namespace std; 

int main() 
{ 

srand (time(NULL)); 
int a= rand()%9+1; 
int b= rand()%9+1; 
int c; 


while (c == a*b) 

{ 


cout<<a<<" * "<<b<<"= "; 
cin>>c; 

} 


    cout<<"oops"; 

return 0; 
} 

我有兩個困難。首先,程序中會生成相同的「隨機」數字。其次,當有人犯錯時,不會顯示「oops」。

感謝您的幫助。

+0

首選''標題。 – chris

+2

查看手冊中的「srand」功能。 –

+0

現在你已經改變了代碼,它仍然可能會得到一個編譯器警告,並且根本不可能輸入while循環。 – chris

回答

1

您每次都看到相同的數字,因爲您在循環之前初始化它們,然後在用戶回答時不更改它們。爲此,每次循環(重新)輸入時都會生成新的隨機值。你可能不會看到「哎呀」,因爲你的程序立即終止。要解決這個問題,您可以使用getch()在退出之前等待一些輸入。

我修正了自己的代碼,以便研究它,並從改變學習:

#include <iostream> 
#include <conio.h> 
#include <time.h> 
#include <stdlib.h> 
#include <string.h> 

using namespace std; 

int main() 
{ 
    srand (time(NULL)); 
    int a = 0; 
    int b = 0; 
    int c = 0; 
    while (c == a*b) 
    { 
     a= rand()%9+1; 
     b= rand()%9+1; 

     cout<<a<<" * "<<b<<"= "; 
     cin>>c; 

    } 
    cout<<"oops"; 
    getch();//Get some input so program does not terminate instantly 
    return 0; 
} 

如果您有任何疑問,隨時發表評論。

+0

非常感謝Daniel。 – user2877477

0

你需要種子你的隨機數發生器,否則你會得到相同的隨機數每次。通常的做法是與當前的播種隨機數生成程序啓動時,如:

srand(time(NULL)); 

你的程序是cout << "oops"線後立即退出。根據您的調試環境,即使放置在控制檯上,您也可能看不到最終輸出。最終的輸出也可能被緩存(而不是立即放在控制檯上)。您可以嘗試添加新行,如:

cout << "oops" << endl; 

或添加顯式調用以防止程序立即退出。您return 0

system("PAUSE"); 

防止調試控制檯的消失馬上:在Windows下(比如說)Visual Studio中,你可以像添加一個命令。在其他環境中,您不會有「暫停」可用,但您可以在最後放置一個無限循環,例如while (true) { /* do nothing */ }僅用於調試。

最後,rand不被認爲是一個很好的僞隨機數發生器,現在大多數人喜歡random(和srandom(time(NULL)))更多。