想知道为什么scanf输入的字符串无效

这是报错情况

img


然后在使用scanf的时候我已经在原文件最上方添加了#include_CRT_SECURE_NO_WARNINGS
原函数在这里

img


这是我输入的数据

img


想问一下为什么报错,谢谢

改成scanf_s
占位符和其参数预计 4 可变参数,但提供的却是 3 参数
缺失的可变参数 4 为格式字符串“%f”所需
发生了指针越界。相比 scanf 为了线性安全,scanf_s 要求在录入字符串的时候都要指定缓冲区的大小。所以解决方案就是指定缓冲区的大小。

修改如下,供参考:

img

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7768259
  • 你也可以参考下这篇文章:*一劳永逸开头直接加上#define _CRT_SECURE_NO_WARNINGS 1 的小妙招(解决scanf报错问题)
  • 除此之外, 这篇博客: 【C语言VS编译器】使用scanf函数有警告?_CRT_SECURE_NO_WARNINGS(四种解决方案)中的 报错提示 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    在这里插入图片描述

  • 以下回答来自chatgpt:

    根据参考资料中的内容,出现scanf输入字符串错误的原因可能是输入的字符串与scanf的格式控制符不符合,或者是由于安全性问题导致的。针对这种情况,可以考虑采取以下措施:

    1.首先,检查输入的字符串是否符合scanf格式控制符的要求。scanf格式控制符有很多种,通常在输入字符串时需要指定相应的格式控制符,例如:%s表示输入的是一个字符串。如果输入的字符串与格式控制符不符合,则会出现错误提示。可以通过以下代码来验证scanf控制格式:

    include

    int main() { char str1[20], str2[30]; int year; printf("格式控制符为:%s\n", "%s %d %[^\n]"); printf("请输入字符串:"); scanf("%s", str1); printf("您输入的字符串:%s\n", str1); return 0; }

    2.如果输入的字符串符合scanf格式控制符的要求,可能是由于安全性问题导致出错。在使用scanf时,为了防止缓冲区溢出等风险,通常需要在程序头部添加#define _CRT_SECURE_NO_WARNINGS。如果添加了该语句仍然不能解决问题,可以尝试使用更安全的方法,例如使用fgets函数来替代scanf函数,同时同时调整缓冲区和字符串长度,以避免缓冲区溢出的问题。以下是使用fgets函数替代scanf函数的示例代码:

    include

    include

    int main() { char str[20]; printf("请输入字符串:"); fgets(str, 20, stdin); printf("您输入的字符串:%s\n", str); return 0; }

    通过以上方法,可能能够解决出现报错的原因是什么,该如何解决的问题。但需要注意,使用fgets函数时需要注意缓冲区溢出等问题,以确保程序的安全性。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^