为什么用scanf输出不了

img

img

img

img


scanf函数和gets函数有什么区别吗,为什么这样输入同一串字符,但是scanf函数输出不了结果

scanf_s("%s", arr, 20);

scanf输入没有最后没有\0,gets 有\0,也就是你用gets输入的是一个字符串, 你用scanf输入进去,用一个printf输出的话,只知道首地址,不知道什么时候结束,你可以用for循环逐个打印数组,或者你直接定义arr为字符串数组,char arr[20]={"0"},这样初始化的时候就自带\0

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7791174
  • 这篇博客你也可以参考下:scanf函数输入之后不能立刻输出结果
  • 您还可以看一下 张景平老师的C语言零基础入门(计算机二级考试)课程中的 06-16 scanf函数特殊用法小节, 巩固相关知识点
  • 除此之外, 这篇博客: 解决scanf函数不安全问题中的 解决scanf函数不安全问题。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:

    关于使用vs2013或者其他版本的小伙伴在最开始总会出现一个问题
    像下图
    在这里插入图片描述

    那就是例如scanf函数,编译器总会让你使用它自己规定的函数,说scanf函数不安全,但是呢,我们还是应该用类似于scanf这样的标准函数,而scanf-s只是这个编译器提供的函数,你无法保证在其他编译器还能使用,所以为了保证代码的可移植性和通用性,我们应该还是使用scanf函数。
    接下来我将为读者提供以下三种方法来解决这个问题

    复制这段错误原因,然后截取其中的 _CRT_SECURE_NO_WARNINGS ,然后在项目的开头用define定义。见下图
    在这里插入图片描述
    然后呢就可以啦!


    第二种呢是一种一劳永逸的方法
    我们先打开vs2013的文件所在地
    在这里插入图片描述
    然后点击Microsoft Visual Stdio 12.0,找到其下的VC文件夹 以及vcprojectitems文件夹
    在这里插入图片描述
    最终目的是为了找到图片中的newc++file.cpp,然后用记事本(打不开的话用notepad++)打开,并复制下之前的那段代码,保存,就可以了。
    在这里插入图片描述
    然后你每次新建项都会自动出现这个东西啦!


    第三种的话,类似与第一种,但是代码不同,因为下面的error是C4996,所以我们也可以添加以下代码
    #pragma warning(disable:4996)
    在这里插入图片描述
    同样也可以解决

    好了,以上就是我为大家分享的三种方法,其中第二种比较好,一劳永逸的解决这个问题。希望我的文章能帮助到阅读的你。
    向C语言进军冲冲冲!


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