2013-08-27 47 views
-1

我剛剛開始使用C,我無法得到一個簡單的for循環內循環函數返回一個布爾。該計劃是一個簡單的猜謎遊戲。for循環不會循環函數內部 - C

這裏是我的代碼:

//standard input and output header 
#include <stdio.h> 
#include <conio.h> 
#include <stdbool.h> 

bool CheckGuess(int guess, int nums[]); 

int main(void) 
{ 
int nums[5]; 
int i; 
int userGuess; 

for (i = 0; i < sizeof(nums)/sizeof(int); i++) 
{ 
    nums[i] = 1 + rand() % 5; 
} 

printf("Guessing Game\n\n"); 

printf("Guess a number between 1 and 5: "); 
scanf("%d", &userGuess); 

if (CheckGuess(userGuess, nums)) 
{ 
    printf("You win!"); 
} 
else 
{ 
    printf("You lose!\nThe correct numbers are:\n\n"); 
    for (i = 0; i < sizeof(nums)/sizeof(int); i++) 
    { 
     printf("%d\n", nums[i]); 
    } 
} 

//get character, wait/pause 
getch(); 
} 

bool CheckGuess(int guess, int nums[]) 
{ 
int z; 
for (z = 0; z < sizeof(nums)/sizeof(int); z++) 
{ 
    printf("%d\n", z); //z just stops at 0 all the time 

    if (guess == nums[z]) 
    { 
       return true; 
    } 
    } 
    return false; 
} 
+0

這個條件'sizeof(nums)/ sizeof(int)'看起來相當可疑。你能解釋一下你想用這個做什麼嗎? – FrustratedWithFormsDesigner

+1

您是否嘗試過打印sizeof(nums)?對於術語「陣列衰減」加上一個快速谷歌應該讓你去。 – stonemetal

+0

[C編程語言中的數組的大小?](http://stackoverflow.com/questions/1975128/sizeof-an-array-in-the-c-programming-language) – Blastfurnace

回答

4

當你寫CheckGuess(),你需要做的是這樣的:

bool CheckGuess(int guess, int nums[], int numsCount) 

,然後用調用它:

if (CheckGuess(userGuess, nums, sizeof nums/sizeof *nums) 

Checkguess不是「接收」大小。在這個函數裏面,它只是一個指針。

+1

+1,但是'numSize'對我來說至少是一個非常奇怪的名字。我知道它是「nums'的大小」,但我認爲'numsLength'或'numsCount'或其他什麼會更清楚。 – unwind

+0

也增加了原因'int nums []'不是函數參數中的數組 –

+0

@unwind - 我做了更改 – dcaswell