返回值被忽略scanf怎么办

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

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

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

  • 除此之外你真的想在你的函数中调用main()吗???

  • @user3121023 感谢您的建议。 :) 但是我仍在寻找解决方案,说明为什么 scanf 不在这里读取字符串,因为如果 scanf 不读取字符串,我仍然无法使用 if 语句

  • @user3121023 哦,好吧,我试过了,我现在明白你的意思了!这是我的错误,对不起,请原谅!!我非常感谢它,祝你有美好的一天! :D


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

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

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

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

  • @bruno 在 C 中允许递归调用 main()。我不能说这段代码是错误的。

  • 对不起,我是 C 的新手,所以我不确定你的意思,但我尝试用我的程序运行上面的代码,没有错误消息或负数弹出......如何修复scanf没有成功读取字符串的错误?

  • @cmy 在当前情况下,如果您在调用之前到达文件末尾,scanf 将不会成功,只有您可以决定在这种情况下做什么;-)

}

说句实话,网上有很多类似的教程,但是我自己也遇到了,所以我决定自己写一篇博客用来记录,这也算是我的一个成长历程吧。

scanf返回值被忽略的这个问题主要是由于VS2019中并没有scanf这个函数,他有一个scanf_s()的一个函数,所以说如果遇到了这种情况,可以改用scanf_s()这种相对来说比较安全的函数。

那如果我就要用scanf这个函数该怎么办呢?

出现这个返回值被忽略的问题,是由于VS2019中自带的SDL检测造成的,我们可以将它进行关闭,这样就不会出现scanf返回值被忽略的问题了。
关闭步骤:右键**“项目文件” **接着打开 “属性”点击“配置属性” ——“C/C++”——“常规”——“SDL检查”改为“否”即可。

}

我要回帖

更多关于 return返回值有什么用 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信