重定向scanf函数可以输入可改变的常量吗

请帮我看看,重定向scanf函数可以输入可改变的常量吗,我的重定向printf函数没有问题就是加了输入之后就出现了乱码!

img

img

img

img

img

img

了解一下有限状态自动机

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7560969
  • 你也可以参考下这篇文章:【求助】输入的数据类型(scanf函数)与输出的数据类型(printf函数)不一致时
  • 除此之外, 这篇博客: 解决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语言进军冲冲冲!

  • 您还可以看一下 传智老师的2016年c语言教程第3天课程中的 07 使用scanf函数一次接收输入多个数据小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    可以尝试去掉scanf中的空格、制表符和换行符,以避免输入时的问题。可以改写scanf为fgets函数,更灵活地处理输入流,而且可以避免一些安全问题。代码如下:

    #include<stdio.h>
    
    int main()
    {
        char input[100];
        gets(input);  //用gets代替scanf
        printf("%s", input);
        return 0;
    }
    

    另外,scanf函数在读取字符时会跳过空格、制表符和换行符,可根据需要调整读取格式,以确保正确读取数据。可以使用getchar函数消耗掉多余输入,以避免格式不一致的问题。代码如下:

    #include<stdio.h>
    
    int main()
    {
        int t,i;
        char w;
        scanf("%d", &t);
        for (int j = 0;j < t;j++)
        {
            while ((w=getchar()) != '\n' && w != EOF) {} //用getchar去掉多余输入
            scanf("%c %d", &w, &i); //按需读取字符和数字
            printf("%c %d", w, i);
        }
        return 0;
    }
    

    最后需要注意的是,scanf函数容易出现错误和安全问题,应当谨慎使用,考虑其他更可靠的输入方式。