【发布时间】:2016-11-03 23:50:31
【问题描述】:
我正在开发一个猜谜游戏程序。主函数要求用户猜测一个数字,如果该数字不等于正确猜测,则将其发送到另一个函数,告诉用户该数字是太高还是太低。然后第二个函数要求用户进行另一个猜测,并将该猜测发送回第一个函数。
我的代码被困在第二个函数中,似乎没有退出它。我不确定要改变什么。
#include <stdio.h>
int guess(int num);
int main(void)
{
int units;
printf("How many legs on a wonderwump??\n");
scanf_s("%d", &units);
while (units != 56)
{
guess(units);
}
printf("Great guess!\n");
return 0;
}
int guess(int num)
{
if (num > 56)
{
printf("Too high of a guess! Try again!");
}
else // (num < 56)
{
printf("Too low of a guess! Try again!");
}
return scanf_s("%d", &num);
}
【问题讨论】:
-
units=guess(units) ; -
guess()函数返回 etiher 0 或 ` 或 EOF,而不是实际的猜测值。这是因为这一行:return scanf("%d", &num);正在返回对scanf()的调用的状态,而不是num的内容,并且函数的调用者甚至没有检查返回的值。 -
在调用任何
scanf()系列函数时,始终检查返回值(而不是参数值)以确保操作成功。 -
此代码块:
while (units != 56) { guess(units); }不会更新 main() 函数中的变量 'units',因此此循环将永远运行。 -
建议阅读
scanf_s()的手册页,为了便于携带,建议改为调用scanf()。如果在 Windows 下运行,这可能需要在程序开头添加一行:#define _CRT_SECURE_NO_WARNINGS
标签: c if-statement