C - 错误:忽略scanf的返回值?

时间:2012-04-06 13:02:00

标签: c

我进入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的返回值

我在这里做错了什么,我该怎么做才能解决它?

4 个答案:

答案 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功能(请点击链接)有几个角色

  1. 它期待一些输入并可以修改您通过地址传递给它的变量
  2. 返回成功输入项目的数量

答案 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的结果捕获到一个变量中,并像其他答案中那样优雅地处理它。