输入输出

一、printf/scanf(C风格,必考重点)

1. 基础语法

  • printfprintf("格式控制字符串", 参数1, 参数2, ...);
  • scanfscanf("格式控制字符串", &变量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,2 3被舍弃。
  • 两种情况都不会编译报错

4. 占位符格式控制(宽度+精度)

格式作用示例代码输出结果
%nd整数占n位宽度,右对齐,不足补空格printf("%3d%3d%3d",1,12,123); 1 12123
%0nd整数占n位宽度,右对齐,不足补0printf("%03d%03d%03d",1,12,123);001012123
%.nd整数占n位宽度,不足补0(同%0nd)printf("%.3d",1);001
%.nlf浮点数保留n位小数,不足补0printf("%.1lf %.2lf %.3lf",1.2,1.23,1.234);1.2 1.23 1.234

5. 特殊字符输出规则

  • 除了%和转义符\,其他所有字符({}()@#&$空格等)都会原样输出
  • 输出单个%必须写两个%%
    例:printf("%%%d#{%d}",5,10); → 输出%5#{10}

二、不正常输入数据的处理

核心原则

变量会从输入流中按顺序读取自己类型需要的部分,遇到类型不匹配的字符,立即停止输入,但程序会继续运行,未读取的变量值不确定。

典型场景

  1. 输入表达式给整型变量

    int a,b;
    cin >> a >> b; // 输入1*2
    cout << a*b; // a=1,b的值不确定,输出随机值
  2. 输入小数给整型变量

    int a;
    cin >> a; // 输入12.98
    cout << a+1; // 读到小数点停止,a=12,输出13
  3. 混合输入字符和整数

    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. 基础语法

  • coutcout << 输出内容1 << 输出内容2 << endl;
  • cincin >> 变量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+2scanf("%d+%d", &a, &b),a=1,b=2scanf会自动匹配格式字符串中的普通字符
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

标签: none

评论已关闭