2016-11-23 76 views
0

我是C新手,在C語言中找到1個論壇來結束一個while循環,並且那個人沒有真正的幫助,因爲它仍然不起作用。它給了我一個「期待;休息之前」或「int keep_playing = 4」來結束循環。這是一個簡單的搖滾紙剪刀遊戲,我只是在循環上工作,很快就會擔心邏輯部分。這是我的代碼。用C語言編程,結束一個while循環

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

int main() 
{ 
    printf("Welcome to rock paper scissors!\n"); 
    int keep_playing=5; 
    while (keep_playing==5) 
     printf("Press 'y' to play or 'n' to quit: "); 
     char playornot; 
     scanf("%c\n",&playornot); 
     if (playornot=='y') 
      printf("Ok.\n"); 
     else (playornot=='y') 
      int keep_playing=4; 

    return 0; 
} 
+2

你缺乏大括號使閱讀真的很痛苦。雖然沒有大括號的循環只考慮循環聲明後的第一個語句,除非你使用逗號(請不要使用常規)。由於縮進是誤導性的,因此很難說出你的意圖是什麼。按照規定,你的程序應該用「printf(」按'y'播放或'n'退出:「);」;因爲這是循環看到的唯一聲明。 – Dmitry

+1

可能重複[我如何根據用戶輸入退出一段時間(1)](http://stackoverflow.com/questions/38913603/how-can-i-exit-a-while1-based-on-一個用戶輸入) – xenteros

+0

你可以使用「break」來結束一個while循環而不是改變一個變量的值 –

回答

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

int main() { 
    printf("Welcome to rock paper scissors!\n"); 
    int keep_playing=5; 
    while (keep_playing==5) { 
     printf("Press 'y' to play or 'n' to quit: "); 
     char playornot; 
     scanf("%c",&playornot); 
     if (playornot=='y') { 
      printf("Ok.\n"); 
     } else if (playornot=='n') { 
      keep_playing=4; 
     } 
    } 
    return 0; 
} 

是您的代碼應該是什麼樣子等。在你的情況下,有一個無限循環,因爲唯一重複的行是printf("Press 'y' to play or 'n' to quit: ");。這是由花括號的運氣造成的。

然後,你有一個錯字,我會說 - 多餘intint keep_playing=4。這聲明瞭另一個變量,僅在此範圍內可見。實際上,如果沒有大括號,它應該會導致錯誤,因爲在那個時刻它的範圍相同。

還有第三個錯誤,沒有人提到過。如果輸入的字符不是y,它應該是n。否則,你應該要求另一個輸入或以某種方式決定如何處理它。

而第四個是你試圖掃描兩個字符到char playornot。從scanf刪除\n

+0

好吧,我想我明白了,但它仍然不像我想要的那樣工作。在用戶按下y之後,它應該打印確定。 –

+0

我做到了,哈哈。它只是坐在那裏,而不是退出或打印好。 –

+0

是的,謝謝。與上次不同的是什麼? –

2

你有2個基本問題:

使用而當
  • ,你需要重複一大堆的代碼行,你需要使用大括號{}周圍所有的代碼是要重複。
  • 當你寫int變量你是聲明變量 - 這告訴編譯器它是什麼樣的變量和它被調用。稍後更改此值不需要重新聲明,因爲您正在進行此操作。