输出函数
调用格式:printf(格式控制字符串,输出表);
例如:
int a = 0;
int b = 1;
double c = 5.6;
float d = 9.3;
char e = 's';
char* s = "i am lihua!";
printf("%d\n%d\n%f\n%s\n",a,b,c,s);
printf("%d\n", c);
printf("9%%\n");
//Sleep(10000);
%x%X%#x%#X不同点
int i = 47;
printf("%x\n", i);
printf("%X\n", i);
printf("%#x\n", i);
printf("%#X\n", i);
从输出结果可以看出:如果是小写的x,输出的字母就是小写的;如果是大写的X,输出的字母就是大写的;如果加一个#,就以标准的十六进制形式输出。
最好是加一个#,否则如果输出的十六进制数正好没有字母的话会误认为是一个十进制数呢!总之,不加#容易造成误解。但是如果输出 0x2f 或 0x2F,那么人家一看就知道是十六进制。而且%#x和%#X中,笔者觉得大写的比较好,因为大写是绝对标准的十六进制写法。
字符宽度修饰符
这里的字符宽度是打印输出占位 位数,正负号代表字符位置
int a=12;
double c = 9.8;
printf("%-3d\n", a);//三个占位符,其中‘1’ ‘2’在其中右部分其余空格填充
printf("%3d\n", a);//3个占位符,其中‘1’ ‘2’在其中左部分其余空格填充
printf("%3.2f\n", c);//3个占位符 小数位数2
加入变量占位数大于所给的占位数,则会自动扩充到变量占位数,另外*可充当任意数字
如何输出 %d、\ 和双引号
printf 中有输出控制符%d,转义字符前面有反斜杠\,还有双引号。那么大家有没有想过这样一个问题:怎样将这三个符号通过 printf 输出到屏幕上呢?
要输出%d只需在前面再加上一个%,要输出\只需在前面再加上一个\,要输出双引号也只需在前面加上一个\即可。程序如下:
printf("%%d\n");
printf("\\\n");
printf("\"\"\n");
不按规范时输出
因为对格式化字符串中的控制字符和输出表不作检查,所以有时出现意外的输出。
int i = 47;
int m = 50;
double f = 2.3;
double g = 1;
printf("%f\n", i);
printf("%d\n", f);
printf("%d\n", g);
printf("%d,%d\n", i);
printf("%d\n", i, m);
输出神魔看平台喽。
输入函数
调用格式:scanf(输入格式化字符串,地址表列);
例如:
char i, j, k;
scanf("%c%c%c", &i, &j, &k);
printf("i = %c, j = %c, k = %c\n", i, j, k);
scanf里面只能是格式化控制字符吗?当然不是。
char i, j, k;
scanf("%c,%c,%c", &i, &j, &k);
printf("i = %c, j = %c, k = %c\n", i, j, k);
注意:
键盘上任何一个字符如空格回车等,都会被接收,然后被格式化,写入目标地址。输入完成时按的enter键也可以被接收,打印为’\n’,也就是换行;
上例我们输入1,j,发现enter不仅结束了输入还被格式化录入目标地址,回车(\n)被打印出来但是因为是尾行,结果看起来不明显。
在试一个明显的例子输入:<\enter> ,<\enter> ,<\enter>第三次回车后:
这次很明显 可以看到回车。
double 接收输入
scanf读%f时,系统会按照4字节长度来读,读完要放到一个4字节的空间位置,也就是一个float所在的位置。那么double有8字节空间,比4字节还大,能不能来放?答案是不能。因为float和double的关系不像int和long的关系那样,简单的在后面增加4字节的位置。float和double有自己专门的数据排列格式,如下:如果读的时候明明是按照float的格式来读,但是却存在double的空间内,并且之后一直按double来操作,那么里面数据的符号位、阶码、尾数就全错位了。除非你在用的时候把每个double强制转换成float来用,但是何必多次一举?同理,如果读用%lf来读,却存在float中,不仅格式错位,而且存储空间也不够,会有数据丢失。所以用scanf读的时候,读%f就规规矩矩的放进float中来存,读%lf就放进double中,这样在使用的时候里面的数据才不会错位。在printf的时候,首先C里面的float其实在使用过程中都是被隐式转换成了double来用。所以你在printf时用float还是double其实是一样的。用%f和%lf都可以。
double i;
scanf("%lf", &i);
printf("%lf", i);
输入格式控制字符串中有\n \t 空格时,dos中任意数量空字符都匹配,只要有即可
getchar() putchar()
char c=getchar();
putchar(c);
输入输出一个字符。
gets() puts()
输入输出一个字符串
char str[20];
str=gets();
puts(str);
gets scanf()注意:
gets scanf接收 字符串:
char s[20];
scanf("%s",s);
printf("%s",s);
dos输入:i am Lihua!
结果:i
scanf gets 接收字符串遇到空格 就结束
解决方法:
char s[20];
scanf("%[^\n]",s);//读到换行符为止(字符串的接收可以用正则匹配)
printf("%s",s);
结果:i am Lihua!