scanf (“格式控制符 ”,地址表列);
格式化輸入函數,其中最後的為地址列表.
canf函数的格式说明:
格式说明 | 输入数据格式 |
%d | 输入十进制整型数 |
%i | 输入整型数,可以是带前导0的八进制数整数和带前导0x的十六进制整数 |
%c | 输入一个字符 |
%o | 输入八进制整型数 |
%x | 输入十六进制整型数 |
%u | 输入无符号的十进制整型数 |
%f | 以带小数点的形式或指数形式输入单精度数或双精度数 |
3 注意事项:
1) “格式控制符号” 与 “地址表列” 例: int x,y,z;
scanf(“%d%d%d”,&x,&y,&z)
输入数据之间有三种分隔方式:(假设分别是10 20 30)
a. 10(空格) 20空格30
b. 10(回车)20(回车)30(回车)
c. 10(tab)20(tab)30回车
例:int x,y,z;
scanf(“%d,%d,%d”,&x,&y,&z)
输入数据的方式是:
(1)10,20 ,30
(2)10,20,(回车)30(回车)
(3)10,(回车)20,(回车)30(回车)等
例:int x,y,z;
scanf(“x=%d,y=%d,z=%d”,&x,&y,&z)
输入数据的方式是: a=10,b=20 ,c=30
3) 在输入控制中,格式说明的类型与输入项的类型应该一一对应匹配。如果类型不匹配,系统并不给出出错信息,但不能得到正确的输入数据。当输入长整型数据时, 必须使用%ld格式,输入双精度时,必须使用%lf或%le,否则不能得到正确数据
例:double x,y,z;
scanf(“x=%d,y=%d,z=%d”,&x,&y,&z)
printf(“%f %f %f”,x,y,z)
输入数据的方式是:a=10,b=20 ,c=30
输出结果是:0.000000 1.345901533 0.000000
虽然没有错误提示,但结果不正确
例:double x,y,z
scanf(“x=%f,y=%f,z=%f”,&x,&y,&z)
printf(“%f %f %f”,x,y,z)
输入数据的方式是: a=10,b=20 ,c=30
输出结果是:0.000000 1.570157 0.000000
但结果是无效数据
例:double x,y,z
scanf(“x=%lf,y=%lf,z=%lf”,&x,&y,&z)
printf(“%f %f %f”,x,y,z)
输入数据的方式是: a=10,b=20 ,c=30
输出结果是:10.000000 20.000000 30.000000
4) 与printf相似,在scanf函数中的格式字符前可以用一个整数指定输入数据所占的宽度,但对实数据不能指定小数的位置
例:执行scanf(“%2d%2d”,&a,&b); 的输入是123456, 则a值为( 12 ),b值为(34 )
例:scanf (“%4.2f”,&f);
5) 跳过输入数据的方法。可以在格式字符与%之间加入一个“*”使输入过程跳过输入的数据。
例:int x,y,z;
scanf(“%d%*d%d%d”,&x,&y,&z)
输入数据的方式是: 10 20 30 40
则系统会把10赋给变量x,跳过数据20,把30赋给变量y,把40赋值给变量z
6) 在输入控制中,格式说明的个数与输入项的个数应该相同。如果格式说明的个数少于输入项的个数,系统自动结束输入,多余的数据没有被读入,但可以作为下一个 输入操作的输入数据,如果格式说明的个数多余输入项的个数,系统同样自动结束输入。
例 int a,b,c;
scanf(“%d%d”,&a,&b,&c);
输入数据形式:10 20 30回车,由于输入控制中只有两个格式说明%d,则只能对a 和b变量分别输入10和20,而30不能被读入,只能作为以后其输入数据。
若后面加一条:scanf(“%d”,&z),那么就自动的把30赋给z
7) 关于 “%c”格式
scanf(“%c%c%c”, &x, &y, &z);
输入方式:abc <回车> x的值是a,y的值是b,z的值是c
若输入方式是:a b c <回车> x的值是a, y的值是空隔,z的值是b因此,对于字符型在输入数据时不能随意加其他字符
要加地址符号& |
main()
{ char ch[5]; int i;
for(i=0;i<4;i++)>
不加入地址符号& |
{ char ch[5]; int i;
scanf(“%s”, ch);
数组名代表该数组的首地址 |
}
沒有留言:
張貼留言