我只有几天的 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的返回值
我在这里做错了什么,我能做些什么来解决它?
我只有几天的 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的返回值
我在这里做错了什么,我能做些什么来解决它?
你可能会编码
if (scanf("%d", &sides) >0) {
printf("you want %d sides.\n", sides);
}
else printf("You did not enter any number.\n");
scanf函数(请点击链接)有几个作用
这是一个警告,会阻止编译器执行它的任务(设置太严格)。检查 scanf() 函数的返回值是否有错误,警告应该消失。
返回值
成功时,该函数返回成功读取的项目数。如果发生匹配失败,此计数可以匹配预期的读数数量或更少,甚至为零。如果在成功读取任何数据之前输入失败,则返回 EOF。
scanf
返回“项目”的数量,即在格式字符串中传递的值(单个项目是例如%d
,%c
等等),以及在 的后续参数中scanf
,例如,要读取以逗号和空格分隔的两个整数,你会利用:
int x, y;
int items = scanf("%d, %d", &x, &y);
assert(items == 2);
我已经破坏了我上面的建议——而不是添加未使用的变量,如果你只想阅读它,添加一个断言:
#include <assert.h>
/* ... */
assert(scanf("%d", &sides) > 0);
/* ... */
不幸的是,assert(scanf("%d", &sides));
这还不够,因为 EOF(这将返回-1
)。这将是非常优雅的。
我认为这是要走的路,如果您不想sides
在这种情况下使用未初始化的变量 ( ) 继续您的程序。
或者,您可以将 's 结果捕获scanf
到变量中,并像其他答案一样优雅地处理它。
您不会捕获scanf
变量中的返回值。它是读取了多少个字符的计数(作为整数),因此如果这对您很重要,那么捕获它可能会很好。