Printf和scanf函数
Printf函数
Float f1=3.14f;
ptintf(“f1=%f”,f1);//输出的是6位小数
ptintf(“f1=%.2f”,f1);//输出的是2位小数
还有%m.n格式:
m 表示所占的列数若m大于数的位数前面用空格
n 表示小数点后的位数
若为%-m.n格式
m 表示所占的列数若m大于数的位数后面用空格
n 表示小数点后的位数
%O把一个数按八进制输出
%x把一个数按八16进制输出
Float类型默认精确小数点后6位,有效位数7位
Double类型默认精确小数点后6位,有效数位15位
Printf使用的注意事项:
1)%md问题(设置域宽问题)
Printf(“%d”,10); );
m --数字,这个数字可以为正,也可以为负
如果要输出的位数>域宽m 按照实际位数输出
Printf(“%3d”,1888);//1888
如果要输出的位数 <域宽m 要补空格
m>0 从左侧开始补空格
m<0 从右侧开始补空格
2)%0md使用注意
%0md表示不足补0
int i=1;
Printf(“%02d”,i);//01
For( i=0;i<20;i++)
Printf(“%02d”,i);//输出结果为00、01、02..........19
3)\t \n \r \\ %%转义字符的问题
\t 制表符
\\ 输出\
%%输出%
Scanf 函数
如果使用这个函数,要包含一个头文件 stdio.h
阻塞式的函数:函数执行后,会等待用户的输入,如果用户不输入任何内容,它会一直等待。
Scanf函数的作用:
从键盘接收用户输入的内容,保存到指定的变量中
Scanf函数的格式:
Scanf(“格式控制符”,输入项的地址列表);
Float score=0.0f;
Scanf(“%f”,&score);//此处比可以写%m.nf,可以写%mf是可以的此时小数点也算一位
Scanf的注意事项:
0)scanf函数当遇到回车的时候,会结束执行
1)接受单个变量的时候,在输入值之前,如果我们输入空格、回车、tab键都会被忽略
2)int age=-1,num=-1;
scanf(“%d%d”,&age,&num);如果从键盘输入12,34
结果age=12,num=-1;
3)scanf混合输入:
int a=-1,b=-1; char c;
Scanf(“%d%c%d”,&a,&c,&b); 若输入12 a 34 的得到的结果是a=12c= “ ”b=-1若想混合输入必须用逗号间隔,scanf(“%d,%c,%d”,&a,&c,&b);
4)域宽:
Scanf(“%5d”,&a); 若输入的为12345678则输出的结果是12345
5)关于*号问题
Scanf(“%d%*d%d”,&a,&b);//%*d的作用是跳过它输入则输入12,34,56 输出的a=12,b=56;
应用输入年份:例如printf(“请输入日期”);scanf(“%d-%d-%d”,&a,&b,&c);输入2015-09-08才能接收若输入2013/12/30就会出现错误所以用scanf(“%d%*c%d%*c%d”);可以掠过2个分隔符
6)scanf中尽量不要用\n,如果一不小心用了,怎么破(scanf(“%d\n”,&a);)
输入值后,随便输入一个内容
或者\n要原样输出若输入了别的也是用这种方法
scanf运行的原理:
1)当用户输入内容后,用户输入的缓冲区中然后,scanf函数会根据格式控制的字符要求,从输入的缓冲区内依次取它想要的内容
如果 从缓冲区中取得内容和我们的格式要求一致,则把值存放到变量中 %d %c%d 如果格式不一致,则不修改变量的值
2)如果scanf缓冲区中还有内容,则scanf不会提示我们再次输入
a=-1;b=-1;
Scanf(“%d”,&a);
Scanf(“%c”,&ch);
Scanf(“%d”,&b);
Printf(“%d%c%d”,a,ch,b);
若输入12
W
34
则输出的结果是12, ,-1;应12w34,则输出的结果为12,w,34
破解方法:用逗号间隔开
Scanf(%d,%c,%d);
或
Scanf(“%d”,&a);
Scanf(“%c”,&ch);吸收空格
Scanf(“%c”,&ch);
Scanf(“%d”,&b);
b就会忽略\n找到与之匹配的 |
|