C语言的scanf("%d\n",&r);只要加入\n逻辑就错了,有大神能告诉我为什么吗?

最好能说的通俗点,本人是小白,跪求大神给解释原因!已经上图,用的是VS2019版,就算把\n去掉也一直提示警告1>C:\Users\lifu\source\repos\2\源.c(8): warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt\stdio.h(1274): note: 参见“scanf”的声明

第1个回答  2019-04-25

\n就结束输入了,scanf函数的第一个参数是都要输入的,你这个"%d\n",就需要先输入一个整数,再输入一个"\",再输入一个"n",再回车,所以一直阻塞在这,随便搜的一个博客,看看应该就理解了

网页链接

追问

是不是意思是,本来给计算机的编译是这里只用填一个数字,而我加了一个\n,计算机收到的编译是要填两个数字,所以我随便输入一个数,计算机还要等我在输入一个数才开始计算输出答案,是这个意思吗?

追答

我想是需要三个吧,一个数,一个'\',一个'n'

追问

我试了输两次数,三次回车

第2个回答  2019-04-25
scanf格式化输入函数和printf格式化输出对应。
例子:
scanf("2019-%d-30",&r);
printf("%d\n",r);
输入:2019-30 //错误格式
2019-10-30 // 正确格式
打印:10
scanf要按照你规定的格式输入
第3个回答  2019-04-25
从VC++2005开始,VS系统提供了scanf_s函数以代替不够安全的scanf函数,但这个scanf_s在标准C语言中没有,只能作为特例,需要把以上第8行改为:
scanf_s("%d",&r);追问

为什么不能用换行符啊,大神讲详细点😳

追答

输入控制串"%d\n"是强制要求输入一个整数和一个回车后再以回车结束,全部输入过程要需要三步,有用吗?

追问

是不是意思是,本来给计算机的编译是这里只用填一个数字,而我加了一个\n,计算机收到的编译是要填两个数字,所以我随便输入一个数,计算机还要等我在输入一个数才开始计算输出答案,是这个意思吗?

追答

你输入一个整数和一个回车后,只是完成了输入控制串要求输入的内容,scanf_s或scanf还需要以回车结束,程序一直在等待你再多输入一个回车。。。还不明白的话,运行起来试试不就得了?

追问

我试了要输入两次,输入一个数字回车,在输入一个数字,在回车,然后在点一次回车才结束

是三次

追答

输入一个整数再连续输入两个回车就结束了啊!你输入这么多整数干嘛?

追问

知道了谢谢

本回答被提问者采纳