scanf输入函数
1,scanf 输入数据
输入机制
如:int a;
int b;
scanf("%d", &a); //&取地址符号,&a表示变量a的地址,即接收用户键盘输入的内容,并将内容保存到指定的变量a的地址(内存)里面。
注:用户输入的内容先会被输入到输入缓冲区里,然后再从输入缓冲区里取对应的值。
//100 200 300 回车符
//输入缓冲区: 100 200 300 回车符
scanf("%d", &a); //scanf再从输入缓冲区里面取值,并存储到变量a所对应的地址里面
//输入缓冲区: 200 300 回车符
scanf("%d", %b);
注: int ret = scanf("%d%d", &a, &b); // 这里返回的值可以判断函数读数是否成功; 如果读取两个成功会返回2值
字符类型的读入注意点:
char name;
scanf("%c", &name);
如用户输入一个整形100后,它执行后会是一个1,因为它会按一个字符从输入缓冲区里读取数据.
printf("%name = %c\n", name);
结果是1而不是100。
如果用户输入一个空格再输入一个100回车后, 则结果name会是一个空格。
ERROR常见错误: char 变量使用%d输入
char a, b;
scanf("%d", &a); //输入 256, 按4个字节存储,
printf("a = %d, b=%d\n", a, b); //输出a =0,b=1
byte byte byte byte ==== 》 1int
00000000 00000001 00000000 00000000
a b
输入一个256在计算机里面是01串存储的,
由于是小端模式存储,故256(1 00000000)
这样会将00000000存储在a里面 1存储在b,因为scanf里面用的是%d,所以要取四个字节的空间。
此类问题是很严重的,在使用中,char类型一定要使用%c,不能使用%d
float 类型的输入直接用%f就可以
double类型的输入只能用 %lf(否则可能数据值为0) , 输出可以用%f, 也可以用%lf