输入输出
输入输出
一、printf/scanf(C风格,必考重点)
1. 基础语法
- printf:
printf("格式控制字符串", 参数1, 参数2, ...); - scanf:
scanf("格式控制字符串", &变量1, &变量2, ...); - 核心规则:双引号里非占位符都直接原模原样输出,占位符会替换为后面的数据
典型应用:输入加法算式并输出结果
// 输入1+2,输出1+2=3 int n1, n2; scanf("%d+%d", &n1, &n2); // 自动匹配输入中的+号 // 三个%d分别替换为n1,n2,n1+n2的值,加号等号照常输出 printf("%d+%d=%d", n1, n2, n1+n2);
2. 完整占位符对照表
| 占位符 | 对应数据类型 | 说明 |
|---|---|---|
%d | 整型(int) | 十进制整数 |
%lld | 长整型(long long) | 64位整数 |
%c | 字符型(char) | 单个字符 |
%s | 字符串(char*) | 以\0结尾的字符串 |
%f | 单精度浮点型(float) | 浮点数 |
%lf | 双精度浮点型(double) | 高精度浮点数 |
%g | 浮点型(float/double) | 自动去掉末尾无意义的0 |
3. 参数数量不匹配规则
- 占位符 多于 参数:多的占位符输出随机值
例:printf("%d,%d,%d", 1,2);→ 输出1,2,随机数 - 占位符 少于 参数:多余的参数被自动舍弃
例:printf("%d,%d", 1,2,3);→ 输出1,23被舍弃。 - 两种情况都不会编译报错
4. 占位符格式控制(宽度+精度)
| 格式 | 作用 | 示例代码 | 输出结果 |
|---|---|---|---|
%nd | 整数占n位宽度,右对齐,不足补空格 | printf("%3d%3d%3d",1,12,123); | 1 12123 |
%0nd | 整数占n位宽度,右对齐,不足补0 | printf("%03d%03d%03d",1,12,123); | 001012123 |
%.nd | 整数占n位宽度,不足补0(同%0nd) | printf("%.3d",1); | 001 |
%.nlf | 浮点数保留n位小数,不足补0 | printf("%.1lf %.2lf %.3lf",1.2,1.23,1.234); | 1.2 1.23 1.234 |
5. 特殊字符输出规则
- 除了
%和转义符\,其他所有字符({}()@#&$空格等)都会原样输出 - 输出单个
%必须写两个%%
例:printf("%%%d#{%d}",5,10);→ 输出%5#{10}
二、不正常输入数据的处理
核心原则
变量会从输入流中按顺序读取自己类型需要的部分,遇到类型不匹配的字符,立即停止输入,但程序会继续运行,未读取的变量值不确定。
典型场景
输入表达式给整型变量
int a,b; cin >> a >> b; // 输入1*2 cout << a*b; // a=1,b的值不确定,输出随机值输入小数给整型变量
int a; cin >> a; // 输入12.98 cout << a+1; // 读到小数点停止,a=12,输出13混合输入字符和整数
char c; int a; cin >> c >> a; // 输入63 cout << c << " " << a; // c='6',a=3,输出6 3
bool类型输入输出
- 输入:0→false,非0→true
- 输出:true→1,false→0
三、cout/cin(C++风格)
1. 基础语法
- cout:
cout << 输出内容1 << 输出内容2 << endl; - cin:
cin >> 变量1 >> 变量2; - 优势:自动识别变量类型,无需写格式控制符
- 输入规则:与scanf完全一致,以空格、回车、制表符作为分隔符
四、高频易错点
| 说法 | 对错 | 说明 |
|---|---|---|
printf("%g", 3+3.1415926535) 输出6.14159是计算机故障 | ❌ | %g默认就是保留五位小数 |
scanf("%d", &N) 输入3.6,N=3 | ✅ | 遇到小数点停止读取,只取整数部分 |
printf("%d#%d&",2,3) 输出2#3& | ✅ | 非格式控制符原样输出 |
scanf("%d", &N) 能接收正整数、负整数、0 | ✅ | %d严格匹配整数,输入字母或小数会导致读取失败 |
| scanf的第一个参数是格式控制字符串 | ✅ | |
输入1+2给scanf("%d+%d", &a, &b),a=1,b=2 | ✅ | scanf会自动匹配格式字符串中的普通字符 |
printf("%%") 输出% | ✅ | 两个%%输出一个% |
六、printf输出样例练习
样例1:基本输出
int a=5, b=7;
printf("%d+%d=%d", a, b, a+b);输出:5+7=12
样例2:格式控制
int a=3, b=25;
double c=3.1415;
printf("a=%02d, b=%3d, c=%.2lf", a, b, c);输出:a=03, b= 25, c=3.14
样例3:特殊字符
printf("成绩:{%d}%%\n", 95);
printf("ID#%04d", 12);输出:
成绩:{95}%
ID#0012样例4:参数不匹配
printf("%d,%d", 10,20,30); // 多余参数被舍弃
printf("\n%d,%d", 10); // 缺少参数,第二个%d输出随机值输出:
10,20
10,随机数样例5:混合占位符
char c='A';
int num=65;
printf("字符%c的ASCII码是%d", c, num);输出:字符A的ASCII码是65
评论已关闭