因为有时候会出奇怪的问题,记录一下。——以读取int和float为例
1.scanf()在读取输入时,会跳过所有空白
#include<stdio.h>
int main(){
float a;
scanf("%f",&a);
printf("%f",a);
return 0;
}
对于上面这段代码,我们做如下的操作:
输入: 123
输出:123.000000
可以看到scanf()忽略了空格。若读入的类型不匹配,我们可以试试这样:
输入:c
输出:-107374176.000000
实际上输出可能是任意值,这取决于你的电脑和编译器。
这是因为scanf()并没有读入有效的float型数字,我们输入的'c'停留在输入缓冲区中,下一次的scanf()也会接收这个'c'并且依然无法读入。
对于这种情况,根据需要可以用该类型的转换说明读入,也可以用getchar()将它读出输入缓冲区。
1.可以用*选择性忽略
#include<stdio.h>
int main(){
int a,b;
scanf("%d%*c%d",&a,&b);
printf("%d %d",a,b);
return 0;
}
注意,在转换说明中我们用了%*c,期待在读取时略过一个字符,操作如下:
输入:520a1314
输出:520 1314
这样一来,我们可以做的操作就很多了。