请帮我看看,重定向scanf函数可以输入可改变的常量吗,我的重定向printf函数没有问题就是加了输入之后就出现了乱码!
了解一下有限状态自动机
关于使用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语言进军冲冲冲!
可以尝试去掉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函数容易出现错误和安全问题,应当谨慎使用,考虑其他更可靠的输入方式。