2013-04-13 54 views
2

好吧,即時嘗試學習一些C.我想寫一個程序,將有一個數字,並讓用戶問一個數字。讀取一個字符,並採取行動在C

我已經做好所有事情之後,它會猜測它詢問用戶他們是否想再次玩。如果他們鍵入Y或y,那麼遊戲將重新啓動,如果他們鍵入'N'或'n',程序將終止。

什麼即時試圖做

int main(){ 

while(playAgain == 'y' || 'Y') { 

*playing code here* 



printf("would you like to play again"); 
scanf("%s", &playAgain); 


} 

它不破...都...永遠,不管是什麼我輸入什麼我做錯了?

+1

您還沒有關閉,while循環。你錯過了一個括號。這可能是問題所在? – kronion

+1

這不會編譯,你缺少一個結束括號,你的'scanf'修飾符是不正確的。 – squiguy

+1

你不能'playAgain =='y'|| 'Y''無論如何,它會'while(playAgain =='y'|| playAgain =='Y')' –

回答

2

我猜這裏的類型爲playAgain是一個字符?

您沒有正確使用scanf。 http://www.cplusplus.com/reference/cstdio/scanf/

scanf with%s expect expect to read a string。在C中,一個字符串是char *,所以它會用指針值寫入playAgain,丟棄最高位。這幾乎是一個隨機值,比較將失敗。如果你想保持playAgain作爲一個角色,你應該使用%c。

順便說一下,它是%不是美元。

另外,你可以實現playAgain作爲一個字符串。在這種情況下,你可以這樣做:

int main(){ 
    char playAgain[buffer_size]; 
    do{ 
     /*playing code here*/ 
     printf("would you like to play again"); 
     scanf("$s", &playAgain); 
     lower_case_string(playAgain); // Call a function for changing string to lower case 
    }while(!strcmp("yes", playAgain) || !strcmp("y", playAgain); 
} 
3

這裏的問題(除了註釋中的內容)是您的條件語義。您希望playAgain == 'y' || 'Y'被解釋爲playAgain equals 'y' or playAgain equals 'Y'

相反,它被解析爲(playAgain equals 'y') or ('Y')。由於true被定義爲非零,並且'Y'非零(ASCII值爲131),因此'Y'始終爲真,並且您的條件始終爲真。你想:

while (playAgain == 'y' || playAgain == 'Y') 
1

你必須修復代碼中的一些事情:

char playAgain = 'y'; 
while(playAgain == 'y' || playAgain == 'Y') // *1 
{ 

    //*playing code here* 

    printf("would you like to play again? "); 
    scanf("%s", &playAgain); //*2 
} 

* 1你必須把由AND或OR(& &或分裂每個條件|| )。

* 2使用scanf參數的正確格式是使用「%」,而不是「$」。在此處查看更多使用信息:http://www.cplusplus.com/reference/cstdio/scanf/

在固定代碼的情況下,while循環總是會重複用戶鍵入以'y'或'Y'開頭的任何單詞,例如'Yellow'將在此代碼中執行重新啓動循環。如果你想控制滿弦介紹,你將不得不使用一個字符數組或字符串,並將其與附配的功能,像這樣的東西比較:

bool compareArrays(char* str1, char* str2, int lenght) 
{ 
    int i; 
    for (i=0; i<lenght; ++i) 
     if (str1[i] != str2[i]) return false; 
    return true; 
}