函数scanf的问题,求助各位大佬
有个课程在讲scanf混合输入的时候讲到%d%f会忽略缓存区中前导空白符,而%c不会,所以为了确保scanf接受成功,课程里说是这样写scanf("%d %c%f",&i,&j,&k);即%d和%c之间加入空格,这样在输入54 m90.65就会正常读取,我又试了下,如果这样输入54 m90.65,即多加一堆空格,依旧能读入正确,这是为什么呀?,讲道理不应该是%c会读到其他空格吗?,为什么都无视了?本帖最后由 傻眼貓咪 于 2021-10-17 15:45 编辑
#include <stdio.h>
int main(){
int i; char c; float f;
scanf("%d%c%f", &i, &c, &f); // 这里 %d%c%f 都故意不空格试试
printf("int = %d, char = %c, float = %f", i, c, f);
return 0;
}范例 1: 54m.123
int = 54, char = m, float = 0.123000范例 2:(输入错误,char 无法读取输入)54 m.123
int = 54, char =, float = 0.000000范例 3:54m .123
int = 54, char = m, float = 0.123000 傻眼貓咪 发表于 2021-10-17 15:44
范例 1:范例 2:(输入错误,char 无法读取输入)范例 3:
嗯嗯,就是大佬,我很疑惑,%d和%c之间加一个空格,然后我这样输入54 m43.54,%c依旧可以获得m,讲道理不应该是获取第二个空格吗? 正常来讲%c并没有过滤空格的能力呀?
本帖最后由 傻眼貓咪 于 2021-10-17 16:06 编辑
wyz20010429 发表于 2021-10-17 15:52
正常来讲%c并没有过滤空格的能力呀?
没错,char 不会自动忽略前导空白符,除非你在 scanf() 里面设定,如:scanf("%d %c%f"); 这里面有空格。
道理其实很简单,因为空格也是 char 字符,其实它读取空格了,就把它输出,只是你看不见空格而已
比如:54 .123
int = 54, char =, float = 0.123000这里故意输入一个空白,你会发现只有中间的 char 输出空白(其实是有东西,就是空格) 空格(空白键)其实就是 ASCII 字符编号 32,如 'A' 是 65 一样意思 傻眼貓咪 发表于 2021-10-17 16:03
没错,char 不会自动忽略前导空白符,除非你在 scanf() 里面设定,如:scanf("%d %c%f"); 这里面有空格 ...
那为什么当是%d %c%f时,我这样输入12空格空格m76.43时,最后它截取的是m,而不是第二个空格呢?{:10_277:} 本帖最后由 傻眼貓咪 于 2021-10-17 16:20 编辑
wyz20010429 发表于 2021-10-17 16:09
那为什么当是%d %c%f时,我这样输入12空格空格m76.43时,最后它截取的是m,而不是第二个空格呢?{:10_277 ...
上面已解说:char 不会自动忽略前导空白符,除非你在 scanf() 里面设定,如:scanf("%d %c%f"); 这里面有空格。就算之后遇到空格,它也会忽略 谢谢大佬,但我实在好奇为什么会这样{:10_266:}
页:
[1]