为什么scanf那一行语句加了\n得输入两次字符才能输出,去掉\n就正常了,如图,为什么?

如题所述

基础知识:
scanf()函数是格式化输入函数,它从标准输入设备(键盘) 读取输入的信息。
其调用格式为: scanf("<格式化字符串>",<地址表>);

解释原因:
scanf在每次回车之后从缓冲区中读取用户输入的字符,且当缓冲区非空时,输入回车之后才会自动结束。
当按照scanf("%c\n", &m)这种形式书写时,相当于你输入结束之后,缓冲区的数据被立即读取且被清空,缓冲区为空,scanf不退出,当你再输入一个字符后,缓冲区不空,再次回车后scanf退出。而变量的值,是你第一次输入的值。

例子说明:
scanf("\n%c", &m);//先刷新缓冲区,输入一次即可
scanf("%c\n", &m);//输入一次即可,刷新缓冲区,再输入一次,缓冲区不为空,退出
scanf("%c\n\n", &m);//输入一次即可,刷新缓冲区,刷新缓冲区,再输入一次,缓冲区不为空,退出

参考链接:
http://blog.csdn.net/mdx20072419/article/details/8543388 (参看最后一个Demo)
温馨提示:内容为网友见解,仅供参考
第1个回答  2015-11-03
这个问题有别人问过,
\n是区分你每次输入的,比如scanf("%d\n%d",&a,&b);一个数回车,另一个数。最后的回车代表的是整个输入结束,所以你的%d\n就是回车表示第一个数输完了,第二个回车表示真个输入结束了。好吧,自己表示这语言组织有点捉急呀追问

可是我输入第一个数后,再连续输入两个回车,还是不会输出结果啊

第2个回答  2015-11-03
这样使用容易造成内存错误。 char *str; 声明了一个指针,但没有对其进行初始化,他的值是一个无法预知的值。可能指向一段空的内存,也可能指向其他程序使用的内存地址,也可能不是无用的内存地址。 scanf("%s",str); 的意思是获取一段字符串,...追问

这跟\n有什么关系?

为什么scanf那一行语句加了\\n得输入两次字符才能输出,去掉\\n就正常了...
解释原因:scanf在每次回车之后从缓冲区中读取用户输入的字符,且当缓冲区非空时,输入回车之后才会自动结束。当按照scanf("%c\\n", &m)这种形式书写时,相当于你输入结束之后,缓冲区的数据被立即读取且被清空,缓冲区为空,scanf不退出,当你再输入一个字符后,缓冲区不空,再次回车后scanf退出。而...

scanf()使用时,能使用\\n吗;我在输入时,使用了“\\n”。居然可以无限输入...
切记 scanf 不能用 \\n 如果用了不过可以在输入的数据后加一个\\n 如: scanf("%d\\n",&n); 可以在命令行输入 5\\n 然后回车就行了 希望能帮到你 楼主 望采纳

c++为什么只有一个输入语句,但是要键入两次才能输出
可能你使用了getchar 之类的字符获取函数。所以需要接收两次回车。请附上代码。因为scanf里面加了\\n 就表示你在输入数字后还需要输入一次回车。请去掉\\n 。\\n用于printf语句中

C编程问题 输入\\n会输入两次1才会出现汉字,不加\\n输入1直接出现汉字...
scanf("%d\\n",&type); 亲,您好~这句话代表了你输入一个数字加一个\\n就完成,再次按下\\n才会结束输入

...了scanf,如果我在scanf中加\\n 转行,就可以输入
输入缓冲区中的数据是由用户从键盘输入的, 由于各种原因(用户输入过多,、输入非代码期待的数据类型、代码问题等等),就会造成输入缓冲区中仍然存有上次用户的输入数据,这时scanf就会直接读取数据而不必等待用户输入。所以最好在scanf语句前加上:fflush(stdin); 来清空输入缓冲区。

C语言字符串输入,补充内容的代码运行时,明明需输入两次,却只能输入一 ...
scanf()是不吸收回车键的,一般按回车之后会多出一个‘\\n’,所以一般经常会在scanf()后面加一个getchar()来吸收这个‘\\n’。

C语言,如果在scanf函数里加\\n为什么只影响第一次循环
scanf中加入\\n就是告诉scanf函数,你要在这个位置输入一个回车符,请忽略 由于scanf默认以回车为输入结束,因此你在输入时要记住在你指定的哪个位置需要多输入一个回车才能让scanf正常接收数据

C语言中scanf函数中加\\n为什么会这样
在scanf里 \\n 很特别的,不是要求输入一个回车换行。老师应该专门强调一下这点。引用一下别人的说法:过滤空格、制表符、回车等输入,也就是说 scanf("%d\\n", &i);printf("%d\\n", i);你输入一个数后,它是不会立即显示的,要等再接收到一个非(空格、制表符、回车)的输入scanf语句才结束...

C语言结构体中,按照循环键盘输入完之后,为什么要非要加再输入一行才能显...
scanf里面去掉\\n。加了的话你输入也要按照相同的格式,所以你必须多打一个回车

c语言 为什么scanf加了个\\n会差别那么大。。
scanf("%d\\n",&s[i]);在scanf的输入格式串中,除了定义的输入变量类型,其它字符在定义了在输入中接收这些字符 "%d\\n"这表示,scanf在接收一个整形数后,再接收一个换行符 如 scanf("%d,%d",&a,&b);这就要求输入时,两个整形间要有一个逗号隔开 如 123,465(如果没有中间没有逗号,那是...

相似回答