已有定义int i;float f1,f2; 执行scanf("%2f%3d%f",&f1,&i,&f2)时,输入"1234.5

如题所述

45.000000,少了两个0。

scanf("%3d%f")  3d 就是截取前三位放在x里面,那么45就赋值给了y;

又因为float默认有效位数是6,所以:结果少了两个0。

scanf中的%3d代表只接收前三个数字。所以是123,又因为scanf中输入格式为%3d%f,所以遇到空格的时候就会停止,即当123赋值给了x的时候接下来就全部赋值给y,又因为有空格,所以在45的时候断开,即y停止计入,又因为y是flote型,所以是小数。所以为45.0。

函数原型

int scanf(const char * restrict format,...);函数 scanf() 是从标准输入流stdin(标准输入设备,一般指向键盘)中读内容的通用子程序,可以说明的格式读入多个字符,并保存在对应地址的变量中。

函数的第一个参数是格式字符串,它指定了输入的格式,并按照格式说明符解析输入对应位置的信息并存储于可变参数列表中对应的指针所指位置。每一个指针要求非空,并且与字符串中的格式符一一顺次对应。

以上内容参考:百度百科-scanf

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-05-13
scanf和printf不同,控制语句中除了格式控制符都不起作用反而会带来麻烦,比如加一个\n不但不会换行还要你手动输一个回车本回答被网友采纳
第2个回答  2018-05-12
怎么啊?
相似回答