11

我只有几天的 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

4 回答 4

9

你可能会编码

if (scanf("%d", &sides) >0) {
    printf("you want %d sides.\n", sides);
} 
else printf("You did not enter any number.\n");

scanf函数(请点击链接)有几个作用

  1. 它期待一些输入,并且可以修改您通过地址传递给它的变量
  2. 它正在返回成功输入项目的数量
于 2012-04-06T13:06:05.147 回答
7

这是一个警告,会阻止编译器执行它的任务(设置太严格)。检查 scanf() 函数的返回值是否有错误,警告应该消失。

返回值

成功时,该函数返回成功读取的项目数。如果发生匹配失败,此计数可以匹配预期的读数数量或更少,甚至为零。如果在成功读取任何数据之前输入失败,则返回 EOF。

于 2012-04-06T13:04:14.463 回答
1

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

于 2018-12-10T18:45:33.447 回答
0

您不会捕获scanf变量中的返回值。它是读取了多少个字符的计数(作为整数),因此如果这对您很重要,那么捕获它可能会很好。

于 2012-04-06T13:03:58.847 回答