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

 

posted @ 2018-05-08 17:46  cindy_zl  阅读(477)  评论(0编辑  收藏  举报