我进入C编程只有几天,所以我不太确定这段代码有什么问题:
#include <stdio.h>
int main(int argc, char * argv[]) {
int sides;
printf("Please enter length of three sides :\n");
scanf("%d", &sides);
return 0;
}
我收到的错误消息如下:
忽略scanf的返回值
我在这里做错了什么,我该怎么做才能解决它?
答案 0 :(得分:5)
这是一个警告,阻止编译器执行它的任务(设置太严格)。检查scanf()函数的返回值是否有错误,警告应该消失。
返回值
成功时,该函数返回项目数 成功阅读。此计数可以匹配预期的数量 如果发生匹配故障,读数或更少,甚至为零。在里面 在成功读取任何数据之前输入失败的情况, EOF被退回。
答案 1 :(得分:4)
您可以编码
if (scanf("%d", &sides) >0) {
printf("you want %d sides.\n", sides);
}
else printf("You did not enter any number.\n");
scanf功能(请点击链接)有几个角色
答案 2 :(得分:1)
您不会在变量中捕获scanf
的返回值。它是读取了多少个字符的计数(整数),所以如果这对你很重要,那么抓住它可能会很好。
答案 3 :(得分:0)
scanf
返回“ items”的数量,即以格式字符串(例如%d
,%c
等)传递的值,以及随后的值例如,scanf
的参数要读取两个用逗号和空格分隔的整数,可以使用:
int x, y;
int items = scanf("%d, %d", &x, &y);
assert(items == 2);
我已经破坏了我上面的建议-而不是添加未使用的变量,如果您只是想阅读它,请添加一个断言:
#include <assert.h>
/* ... */
assert(scanf("%d", &sides) > 0);
/* ... */
不幸的是,由于EOF,assert(scanf("%d", &sides));
是不够的(这将返回-1
)。真的很优雅。
在这种情况下,如果您不想使用未初始化的变量(sides
)继续运行程序,我认为这是可行的方法。
或者,您可以将scanf
的结果捕获到一个变量中,并像其他答案中那样优雅地处理它。