2014-10-08 35 views
1

我目前正在做一個學校作業,現在我真的卡住了。我遇到的問題是,當我試圖將數組dice的元素複製到數組diceCheck時,程序進入某種無限循環,我不明白爲什麼。幫助將不勝感激! 編輯:它在函數printScores的底部。複製陣列的元素到一個新的 - C

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

void printMenu(void); 
void throwDice(int dice[], int nrOfDice, int nrOfDieValues); 
void readDieValues (int dice[], int nrOfDice); 
void printDice(const int dice[], int nrOfDice); 
void printScores(const int dice[], int nrOfdice, int nrOfDieValues); 
int isThreeOfAKind(const int dieValues[], int nrOfDieValues); 
int isSmallStraight(const int dieValues[], int nrOfDieValues); 

int main(void) 
{ 
    const int nrOfDice = 5; 
    const int nrOfDieValues = 6; 
    int dice[4], menuChoice = 0; 

    printMenu(); 
    printf("\nMake your choice: "); 
    while(scanf("%d", &menuChoice) != -1) 
    { 
     switch (menuChoice) 
     { 
      case 0: 
       printMenu(); 
      break; 
      case 1: 
       throwDice(dice, nrOfDice, nrOfDieValues); 
       printf("Make your choice: "); 
      break; 
      case 2: 
       readDieValues(dice, nrOfDice); 
       printf("Make your choice: "); 
      break; 
      case 3: 
       printDice(dice, nrOfDice); 
       printf("Make your choice: "); 
      break; 
      case 4: 
       printScores(dice, nrOfDice, nrOfDieValues); 
      break; 
      case -1: 
       return 0; 
      break; 
      default: 
       printf("Invalid choice!\n"); 
      break; 
     } 
    } 
    return 0; 
} 

void printMenu() 
{ 
    printf("MENU:\n"); 
    printf("0. Display the menu\n"); 
    printf("1. Make a random throw\n"); 
    printf("2. Enter die values for a throw\n"); 
    printf("3. Display the die values for the throw\n"); 
    printf("4. Display the score for the throw\n"); 
    printf("-1. End program\n"); 
} 

void throwDice(int dice[], int nrOfDice, int nrOfDieValues) 
{ 
    int choice, i; 
    printf("Enter seed (1 gives a random seed): "); 
    scanf("%d", &choice); 
    if(choice == 1) 
    { 
     srand(time(NULL)); 
     for (i = 0; i < nrOfDice; i++) 
     { 
      dice[i] = (rand() % nrOfDieValues) + 1; 
     } 
     printf("\n"); 
    } 
    else 
    { 
     srand(choice); 
     for(i = 0; i < nrOfDice; i++) 
     { 
      dice[i] = (rand() % nrOfDieValues) + 1; 
     } 
     printf("\n"); 
    } 
} 

void readDieValues(int dice[], int nrOfDice) 
{ 
    int i; 
    for(i = 0; i < nrOfDice; i++) 
    { 
     printf("Die %d: ", (i+1)); 
     scanf("%d", &dice[i]); 
    } 
} 

void printDice(const int dice[], int nrOfDice) 
{ 
    int i; 
    printf("Your dice: "); 
    for(i = 0; i < nrOfDice; i++) 
    { 
     printf("%d ", dice[i]); 
    } 
    printf("\n\n"); 
} 

int isThreeOfAKind(const int dieValues[], int nrOfDieValues) 
{ 
} 

int isSmallStraight(const int dieValues[], int nrOfDieValues) 
{ 
} 

void printScores(const int dice[], int nrOfdice, int nrOfDieValues) 
{ 
    int diceCheck[4], i; 

    for(i = 0; i < nrOfdice; i++) 
    { 
     diceCheck[i] = dice[i]; 

     printf("%d ", dice[i]); //these are just for myself to check if it worked 
     printf("%d ", diceCheck[i]); //these are just for myself to check if it worked 
    } 
} 
+0

通常在這裏粘貼代碼時,您應該只粘貼生病所需的最少代碼解決你的問題。另外,請嘗試減少不必要的空行數量。 – 2014-10-08 02:56:37

回答

1

您有:

const int nrOfDice = 5; 

int dice[4]; 
int diceCheck[4]; 

你複製的想法是正確的,但你要一個過去的數組的末尾。

爲了避免這種錯誤,從相同的表達初始化二者,例如:

int dice[4]; 
const int nrOfDice = sizeof dice/sizeof dice[0]; 

const int nrOfDice = 4; 
int dice[nrOfDice]; 

和PrintScores函數內部,而不是int diceCheck[4];,做到:

int diceCheck[nrOfDice]; 
+0

非常感謝,那確實解決了它! :)出於好奇,例如int dice [5]和diceCheck [5]有效嗎?儘管如果我寫這樣的話,nrOfDice將會沒有用處,但仍然可以讓我更容易理解。我應該早些意識到使用nrOfDice而不是「數字」,但現在我知道了。謝謝你:) – 2014-10-08 02:42:23

+0

是的,這是可行的,但它很容易出錯,讓你的progrma依賴於出現在兩個不同地方的相同數字。 – 2014-10-08 03:06:17

相關問題