之前在写代码的过程中发现如果scanf中的格式字符串以\n结尾,那么输入完后,会不能中止程序,一直按回车也没用,只有再输入一个字符才能中止,同样的事情也发生在以\t和空格结尾。
#include<stdio.h>
int main()
{
scanf("%d\n");
}
#include<stdio.h>
int main()
{
scanf("%d\t");
}
#include<stdio.h>
int main()
{
scanf("%d ");
}
翻阅书本后会发现,原来是scanf的特性决定的,scanf()函数每次读取一个字符,会跳过所有的空白字符,直到遇到第一个非空白字符才开始读取(注意:如果要读取整数,scanf会希望发现一个数字或+/-号)
引用书上的内容
处理格式串中的普通字符时,scanf函数采取的动作依赖于这个字符是否为空白字符。
空白字符。当在格式串中遇到一个或多个连续的空白字符时,scanf函数从输入中重复读空白字符直到遇到一个非空白字符(把该字符“放回原处”)为止。格式串中的一个空白字符可以与输入中任意数量的空白字符相匹配,包括0个(因此scanf("%d%d")和scanf("%d %d")是一样的)。
其它字符。当在格式串中遇到非空白字符时,scanf函数将把它与下一个输入字符进行比较。如果两个字符相匹配,那么scanf函数会放弃输入字符而继续处理格式串。如果两个字符不匹配,那么scanf函数会把不匹配的字符放回输入中,然后异常退出。
所以在格式串末尾有了空白字符后,scanf就会一直读取空白字符,一直按回车和空格就不能中止程序,只有输入一个非空白字符后,才会中止。