2013-08-27 2 views
-1

Я только начал с C, и я не могу получить простой цикл for, чтобы зациклиться внутри функции, которая возвращает bool. Программа - простая игра с угадыванием.для цикла петли внутри функции - 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)? Это плюс быстрый google для термина «разложение массива» должен заставить вас идти. – 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