相同点:
调用scanf()、getchar()、gets()这三个函数时,若缓冲区中残留有可令函数结束的字符,则函数碰到时会按自己结束方式结束。没有可令函数结束的字符,则函数会等待键盘输入。键盘键入的数据都会先放入输入缓冲区中,然后函数从缓冲区中读数据。
不同点:
读字符串:
scanf()函数:从缓冲区中拿字符,碰到【空格、回车、Tab键】则将其从缓冲区中扔掉。遇到第一个不为【空格、回车、Tab键】的字符后开始读取,再次碰到【空格、回车、Tab键】时结束。(最后碰到的这个【空格、回车、Tab键】仍然留在缓冲区中)。
gets()函数:从缓冲区当前的第一个字符起(包括【空格、回车、Tab键】)开始读取,碰到【回车键】时结束。(最后碰到的这个【回车键】已经不再缓冲区中了,gets()函数将其读入,并用null替换)
读字符:
scanf()函数/getchar()函数:读取当前缓冲区的第一个字符(包括【空格、回车、Tab键】),以【回车键】结束。(最后的【回车键】仍然在缓冲区中)
清空缓冲区:C语言里提供了函数清空缓冲区,只要在读数据之前先清空缓冲区就没问题了!
这个函数是fflush(stdin)