又是 scanf 。 吸收回车符。
在scanf函数中%c之前输入一个空格符(或者换成\n)---scanf(" %c"),或者在每次scanf之前清空键盘缓冲区(fflush()函数)。同样可达到gechar吸收回车符的目的。
这涉及到scanf输入字符串的匹配问题,如果格式字符串中有一个空格,则输入时会跳过相应位置开始出现的所有空格字符(包括空格、换行符,制表符等等)所以在%c之前加一个空格,表示对输入的字符,跳过开始处出现的所有空格(包括空格、换行符、制表符等),如果不加,则由于回车、换行也是一个字符,所以也会对其进行处理。
如果scanf输入的不是字符,那么分隔符为回车,空格、tab键时,两个数据之间的分隔符只是起区别两个数据的作用,把分隔好的两个数据分别赋值到各自定义好的变量或数组中去,两个数据之间的分隔符被从缓冲区读出但是不起任何作用,当然最后一个'\n '会被留在缓冲区内,除非用getchar();或scanf("%c",&c);把它读出来。
回车是一定要有的,不管getchar还是scanf只要是通过缓冲区输入数据的函数都是等待回车键'\n '出现才进入缓冲区的。
ex:在输入两个整型数据时,两个数据之间无论是回车还是若干空格都被scanf当做分隔符.。scanf读到分隔符(回车或空格)时,把第一个整型数据送到变量a中,缓冲区中留下分隔符和下面的整型数据,这时scanf再读当然先读分隔符,但是要求输入的是整型数据(%d),所以分隔符被忽略。如果这时要求输入字符%c(不是字符串%s),那么分隔符将以一个字节的形式送到字符变量里。