2015-10-28 46 views
-3

我正在用C編程語言創建一個骰子游戲。我要求用戶輸入一個小於12的數字,因爲5 + 6 = 11。 11是我們在骰子中得到的最高數字。之後,我隨機生成2到1和6之間的數字,因爲1是最小的,6是骰子上最高的數字。之後,我添加這兩個數字,並繼續添加它們,直到它等於用戶輸入的數字。例如:如果用戶輸入9,我們得到5 + 4 = 9或6 + 3 = 9。程序結束時,我們得到這個號碼。以下是我迄今所做的:C編程語言中的Infinte while循環1

#include <stdio.h> 
#include <stdlib.h> 
int main(void) { 

    int totalSought; 
    int i = 1; 
    int j; 
    int count; 
    int totalThrows = 2; 
    time_t totalTime; 

    printf("Game of Dice \n"); 
    printf("============ \n"); 

    printf("Enter total sought: "); 
    scanf("%d", &totalSought); 

    if (totalSought > 11) { 
     printf("** Invalid Input! Try Again! **\n"); 
     while (totalSought > 11) { 
       printf("Enter total sought: "); 
       scanf("%d", &totalSought); 
     } 
    } 

    srand((unsigned) time(&totalTime)); 

    while (i < totalThrows) { 
     while (j != 7) { 
      printf("Result of throw %d %d \n", rand() % 6, j); 
     } 
     i++; 
    } 
} 

當我運行這個程序,我得到一個無限循環,看起來像這樣:

Result of throw 2 -1218106363 
Result of throw 3 -1218106363 
Result of throw 1 -1218106363 
Result of throw 5 -1218106363 
Result of throw 5 -1218106363 
Result of throw 2 -1218106363 
Result of throw 4 -1218106363 
Result of throw 0 -1218106363 
Result of throw 5 -1218106363 
Result of throw 4 -1218106363 
Result of throw 1 -1218106363 

我想是這樣的:

Enter total sought: 5 
Result of throw 1: 3 + 1 
Result of throw 2: 2 + 6 
Result of throw 3: 3 + 2 
You got your total in 3 throws! 

爲什麼我會得到一個無限循環?

+0

兩個骰子(假設6雙面)的最高值可以是12 –

+1

而J = 7 <! - 內您永遠不要改變j的值,所以j永遠不會是7,並且永遠不會停止循環 – ivan

+3

在使用它之前,你還沒有初始化'j'。 – lurker

回答

4
  1. J的不初始化
  2. 你沒有更新的變量J的任何地方
1

你永遠不會改變你的循環終止值:

while (j != 7) { 

     printf("Result of throw %d %d \n", rand() % 6, j); 
} 

因爲j永遠不會改變,如果它進入循環是「不-7」它將STAY「不-7」,並且循環會永不終止。

也許你的意思是有更多的東西是這樣的:

while(j != 7) { 
    j= rand() % 6; 
    ... 
} 

儘管這永遠不會達到j=7要麼,因爲你正在做%6

+0

也在進入'while'之前,'j'應該被初始化.. – wrangler

+1

從技術上講,由於'j'是不確定的,所以'j!= 7'看起來可能是真的,然後改爲顯示false,即使它沒有更新循環。 –