【发布时间】:2017-08-20 21:37:58
【问题描述】:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
//prototype
void input(int *);
void statements(int, int);
void print(int, int *);
void main()
{
int num, guess;
time_t t;
srand((unsigned) time(&t));
num=rand()% 100+1;
printf("%d\n", num);
input(&guess);
statements(num, guess);
}
void input(int *guess)
{
printf("Guess a number between 1 and 100: ");
scanf("%d", &*guess);
}
void statements (int num, int guess)
{
if(guess==num)
printf("You have guessed correct! The number is: %d", num);
else if(guess>num)
{
printf("The number you have guessed is too big\n");
print(num, &guess);
}
else if(guess<num)
{
printf("The number you have guessed is too small\n");
print(num, &guess);
}
}
void print( int num, int *guess)
{
printf("Guess again: ");
scanf("%d", &*guess);
statements(num, guess);
}
基本上,我正在为一个猜谜游戏编写一个程序作为作业,用户不断尝试直到他/她的答案是正确的;但是,当我执行它时,如果用户第一次没有得到正确的结果,程序会一直告诉他这个数字太大了。不允许循环 例子: 85 猜一个 1 到 100 之间的数字:90 你猜的数字太大了 再猜:20 你猜的数字太大了 再猜一猜:
任何帮助将不胜感激
【问题讨论】:
-
您是否尝试过在调试器中逐行执行代码?这样做,同时监控变量及其值,你应该能够自己弄清楚。
-
一个很好的提示应该是你的编译器会给你的代码警告。您没有将正确的参数类型传递给所有函数调用。
-
在不相关的注释中,当您调用
scanf来读取猜测时,变量guess已经是一个指针。&和取消引用*运算符的地址相互抵消。&*guess等于普通的guess。 -
当您在
print内部调用statements(num, guess);时,您传递的是一个指针并将其转换为一个int。正如@Someprogrammerdude 指出的那样,您的编译器会发出有关类型不匹配的警告。 -
只是指出,main() 必须有一个返回类型“int”。
标签: c function if-statement