一、printf【头文件<stdio.h>】
占位符
在要打印的文本中占据一个位置,可以用其他值替换
如:
#include<stdio.h>
int main()
{
printf("%s will come %d o'clock.", "张三", 12);
return 0;
}
输出结果是: 张三 will come 12 o’clock.
参数与占位符为一一对应关系,不能打乱顺序。如果参数个数小于占位符的数量,输出结果可能是内存中的任意值。
一些占位符的列举:
- %d:十进制整数
- %c:字符
- %s:字符串
- %f:单精度浮点数
- %lf:双精度浮点数
- %a:十六进制浮点数,字母输出为小写
- %A:同上,但字母输出为大写
- %e:科学计数法,e为小写,如3e3=3*10^3
- %E:同上,但E为大写
- %i:整数,基本等同于%d
- %o:八进制整数
- %x:十六进制整数
- %p:指针
- %u:无符号整数
- %%:一个单纯的百分号
- %n:已输出的字符串数量(本⾝不输出,只将值存储在指定变量之中)
- %g :6个有效数字的浮点数。整数部分⼀旦超过6位,就会⾃动转为科学计数法,指数部分的 e 为⼩写。
- %G :等同于 %g ,不过指数部分E为大写
对输出内容的限定
最小宽度
#include<stdio.h>
int main()
{ printf("%12f",100);
return 0;
}
以上输出的结果为“ 100.000000“,数字前面有俩空格,因为默认小数点后保留六位,且限定的宽度为12,那么打印的结果就有12位
如果想要空格加在右边,在12前加一个-
变成printf("%-12f",100);
即可
(超过了最小宽度就是照常全部输出)
显示正号
#include<stdio.h>
int main()
{
printf("%+d",100);
return 0;
}
在%后面加上+,输出的结果就会带上符号,此时输出的是+100
小数位数
#include <stdio.h>
int main()
{
printf("%.2f",3);
return 0;
}
此时f前的.2用来限制保留两位小数,输出结果为3.0
可与限制宽度的写法结合
#include<stdio.h>
int main()
{
printf("%12.5f",3);
return 0;
}
输出的结果为3.00000,前面有5个空格
最小宽度和小数位数这两个限定参数可以用*代替
#include<stdio.h>
int main()
{
printf("*.*f",12,5,3);
return 0
}
和上面结果是一样的
输出部分字符串
#include<stdio.h>
int main()
{
printf("%.5s","hello world");
return 0;
}
以上输出结果只有一个hello,因为前面的.5限制了它只能输出5个字符
(一个汉字算两个字符)
scanf【头文件<stdio.h>】
scanf函数表示读取在键盘上输入的内容
当程序运行到scanf函数时,会停下来等待用户输入,用户存入数据后,scanf函数将其存入变量
#include<stdio.h>
int main()
{
int a=0;
int b=0;
int m=scanf("%d %d",&a,&b);//注意变量一定要取地址!!!
printf("%d\n",a+b);
printf("%d\n",m);
return 0;
}
输入1 2,代码的运行结果是3 2
此时m为scanf函数的返回值,也就是scanf函数成功读到的变量个数
如果跳过读取数值的过程(按ctrl+Z),那么返回值就是常数EOF,也就是-1
- scanf函数处理数值占位符时,会自动过滤空白字符,包括空格、制表符、换行符等
所以无论输入的两个变量之间有多少个空格,或是回车都不会影响读取 - scanf函数在读到不符合格式的数据时会终止读数,继续下一个数据的读取
#include<stdio.h>
int main()
{
int x;
float y;
scanf("%d", &x);
scanf("%f", &y);
return 0
}
此处若输入-13.45e12# 0
读到的x为-13,y为0.45*10^12
占位符
与printf的基本一致
-
%[]:在方括号中指定一组匹配的字符(如[0~9]),遇到不在集合中的字符,匹配将会停止
-
这些占位符读取时都会跳过开头的空格,%c除外【 %c(%前面加一个空格)可以强制跳过开头的空格】
-
%s读取时是从第一个非空白字符开始,一直读到一个空白字符结束,不会包含空白字符,所以不方便用它表示多个单词(除非多个%s连用)
-
占位符为%s时,会在字符串后面多加一个\0
字符串长度
scanf函数不会检测字符串是否超出了数组长度,为了防止超出,应该指定读入字符串的最大长度,后面的字符将被丢弃。
#include<stdio.h>
int main()
{
char A[11];
scanf("%10s",A);//变量要取地址,数组名和指针无需
return 0;
}
赋值忽略符
#include<stdio.h>
int main()
{
int a=0;
int b=0;
int c=0;
scanf("%d-%d-%d",&a,&b,&c);
printf("%d-%d-%d\n",a,b,c);
return 0;
}
如果输入1/2/3,代码就无法运行
此时只要把*加在任意占位符的%后面就可以让系统自动忽略这个符号
scanf("%d%*c%d%*c%d",&a,&b,&c);
这样无论是1/2/3还是1-2-3都可以运行下去