为什么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有什么关系?