请问这个scanf哪里错了

img


麻烦各位看看,我这个scanf哪里出错了,系统一直提示出了错,谢谢各位的指导。

程序没错,但是vs默认不允许scanf
修改为 scanf_s

把scanf改为scanf_s

错到没错,这个scanf得在dev-c++里可以用。VS是不允许的,VS规定是:

scanf_s("%d",&no);
不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7803550
  • 你也可以参考下这篇文章:~scanf是什么意思,为什么scanf前加~
  • 您还可以看一下 李南江老师的零基础学会C语言课程中的 scanf函数实现原理(掌握) 小节, 巩固相关知识点
  • 除此之外, 这篇博客: C语言关于scanf的详细说明,连续scanf出错的原因,缓冲区有上次输入的垃圾!中的 的输入: 部分也许能够解决你的问题。
  • 以下回答由chatgpt基于相关博客总结生成:

    回答:

    根据您提供的代码,我注意到您在使用scanf函数时可能会遇到以下两个问题:

    1. 缺少头文件
    2. 包含换行符的输入

    首先,您需要在程序的开头添加#include 头文件,以便能够正确使用scanf`函数。修改后的代码如下:

    #include <stdio.h>
    #include <stdlib.h>
    
    int main() {
        int number;
    
        printf("请输入一个整数: ");
        scanf("%d", &number);
    
        printf("您输入的整数是: %d\n", number);
    
        return 0;
    }
    

    第二个问题是,当您在输入整数后按下Enter键时,会生成一个换行符(\n)。这个换行符仍然留在输入缓冲区中,并被下一个scanf函数读取。因此,您需要在scanf函数中指定一个格式化字符串,以便跳过输入缓冲区中的换行符。修改后的代码如下:

    #include <stdio.h>
    #include <stdlib.h>
    
    int main() {
        int number;
    
        printf("请输入一个整数: ");
        scanf("%d", &number);
    
        // 清空输入缓冲区中的换行符
        while (getchar() != '\n');
    
        printf("您输入的整数是: %d\n", number);
    
        return 0;
    }
    

    这样,您的程序就可以正常运行了。希望对您有所帮助!如果还有其他问题,请随时提问。


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

错误提示,scanf() 函数是不安全的,建议用 scanf_s() 函数替换它。
或者,在源文件头文件引用位置加入 #define _CRT_SECURE_NO_WARNINGS