【问题标题】:return value ignored: 'scanf' (closed)返回值被忽略:'scanf'(关闭)
【发布时间】:2021-01-31 16:09:56
【问题描述】:

我正在用 C 编写一个程序,这是我的功能之一:

void group3()
{
    char select[5];
    printf("\nDetails etc.");
    printf("\nPlease confirm Yes/No if you would like to subscribe:");
    scanf("%s", select);
    if (select == "Yes")
        printf("Good.");
    else
    {
        printf("Alright.");
        main();
    }
}

但是当我尝试编译和调试程序时,会出现一个名为“忽略返回值:'scanf'”的警告。我注意到当我对整数运行 scanf 时也会出现警告,但程序仍然适用于整数。但是,当我尝试扫描字符串时,它不起作用。我尝试过使用 getchar(),但 getchar() 也会出现同样的警告。我也尝试过使用 scanf_s 但是当我尝试 scanf_s 查找字符串时会出现同样的问题。我还在我的程序中定义了 _CRT_SECURE_NO_WARNINGS。如果有人能向我解释如何消除此警告的发生/让 scanf 或 getchar 处理字符串,我将不胜感激。

编辑:感谢一些乐于助人的用户,我发现问题不是因为没有读取字符串,而是因为我无法以这种方式使用 if 语句比较字符串。答案在评论部分,我无法选择它作为正确答案,但这个问题已关闭。谢谢你:)

【问题讨论】:

  • 除此之外你真的想在你的函数中调用main()吗???
  • @user3121023 感谢您的建议。 :) 但是我仍在寻找解决方案,说明为什么 scanf 不在这里读取字符串,因为如果 scanf 不读取字符串,我仍然无法使用 if 语句
  • @user3121023 哦,好吧,我试过了,我现在明白你的意思了!这是我的错误,对不起,请原谅!!我非常感谢它,祝你有美好的一天! :D

标签: c scanf warnings compiler-warnings getchar


【解决方案1】:

问题是scanf()的返回值被忽略了,所以不要忽略它来消除警告。

scanf() 成功时返回读取数据的数量,错误时返回负数,因此检查它是否成功读取所需内容很有用。

例子:

    if (scanf("%4s", select) != 1) {
        fputs("read error\n", stderr);
        exit(1);
    }

另外,最好读取要读取的长度以避免缓冲区溢出。 在上面的例子中也是这样做的。

还有一点是select == "Yes" 不是在 C 中比较字符串的正确方法。 这是比较指针,它不会是真的,因为数组和字符串文字存储在内存中的不同位置。 string.h 中的 strcmp() 函数可用于比较字符串。

【讨论】:

  • 也可能是您对 main 调用的回答中的一个备注?
  • @bruno 在 C 中允许递归调用 main()。我不能说这段代码是错误的。
  • 至少这是可疑的 ;-)
  • 对不起,我是 C 的新手,所以我不确定你的意思,但我尝试用我的程序运行上面的代码,没有错误消息或负数弹出......如何修复scanf没有成功读取字符串的错误?
  • @cmy 在当前情况下,如果您在调用之前到达文件末尾,scanf 将不会成功,只有您可以决定在这种情况下做什么;-)
猜你喜欢
  • 2021-10-03
  • 2018-04-02
  • 1970-01-01
  • 2015-04-06
  • 1970-01-01
  • 2021-01-13
  • 2022-01-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多