C语言中基本输入主要有三个函数:scanf、getchar、gets。
首先他们的输入都是基于缓冲区的,字符被放入缓冲区,然后输入函数去取,取的时候就有区别了,关键是对空格和回车符的处理不大一样。
int main()
{
char a,b;
scanf("%c",&a);
scanf("%c",&b);
printf("%d %d",a,b);
return 0;
}
这个程序执行输入a 后按回车的话程序会即刻结束输出97 ,10,第二个scanf不会执行,因为输入函数是从缓冲区去取,而scanf对回车符的处理是不会清除,所以下一个scanf就接收到了这个回车符,这里10就是回车符的ascii码。
但是接收字符串的时候,scanf函数又会清除回车符。
当需要接收hello world 这两个单词的时候,需要考虑中间的空格,因为scanf函数结束的标志是空格、回车、缩进符。scanf会遇到空格结束,所以只能接收到hello,这里可以用gets函数,它可以接收空格,以回车符结束,并且会舍弃最后的回车符!
getchar是以回车符结束,我试了一下getchar是接收缓冲区第一个字符,包括空格和回车符。
这也就是有时候用getchar()来暂停函数的时候它直接运行过去了并没有暂停的效果,这可能就是缓冲区里残留的回车符导致的。
C语言里提供了函数清空缓冲区,只要在读数据之前先清空缓冲区就没问题了!
这个函数是fflush(stdin)。