scanf函数的原型定义:
int scanf(“格式控制字符串”,参数地址表);
格式控制字符串中通常包含三大类的内容。
1.[空白字符] 以空格和tab为主。
2.[非空白字符] 除了空白字符和%开头的格式说明符。
3.[格式说明符] 以%开始的格式说明符遵循下面的格式:
%[*][width] [modifiers]type。
注意-当输入语句的双引号中有逗号时,应该原样输入 ,因为格式控制字符串中的非空白字符一定要和输入流中下一个输入的字符匹配上,如果不匹配,scanf函数会失败并且退出。
注意-scanf函数会读入并忽略掉所有stdin中的空白字符,所以输入中的空格和tab键都被读入并被忽略了格式控制字符串中有非空白字符逗号“,”。
针对空白字符与非空白字符
当格式控制字符串中出现一个非空白字符的时候,scanf函数会从stdin中读取下一个字符,然后把读取的字符和非空白字符比较,如果比较一致,会舍弃读入的字符,函数继续从stdin读入数据,如果不匹配,函数失败并返回,同时stdin缓冲区中剩余的字符串不读入。
如果格式控制字符串遇到空白字符,那么scanf函数会从stdin缓冲区读入并忽略掉所有的空白字符(零个或多个),直到遇到一个非空白字符为止。
如果格式控制字符串遇到格式说明符,根据格式说明符的格式,scanf函数会从stdin缓冲区读入对应数据。例如,对于%c,读入任何一个字符,对于%d和%s,根据对应格式读入数据,
根据格式读入对应的数据时,
有三种情况被认为是数据输入结束。
● 在stdin缓冲区遇到空白符
● 遇到非法字符输入
● 达到输出域宽时
最后说一下-输入单个字符的情况
当我们调用scanf("%c",&c)读取一个字符的时候,输入中的任何字符,包括空白字符,都不会被忽略。
也就是说,通过键盘输入的任何一个字符,包括空格,tab和回车,都会被scanf函数成功读入,并被保存到字符变量c中
当利用scanf读入一个整数的时候,情况有些不同,输入中的空格、回车、tab键会被忽略。但是读入数字时,只有空格、回车、tab键等空白键会被忽略,如逗号则不会忽略。