【C++专题】格式化输出与输入

格式化输出与输入专题

一、格式化输出 printf

1. 基本语法

printf 用于按指定格式输出数据,由格式控制字符串输出项两部分组成:

  • 格式控制字符串:包含普通字符(直接输出)和格式说明符(以%开头,指定输出类型与格式)
  • 输出项:需要输出的变量或常量,数量与类型必须和格式说明符一一对应
cpp 复制代码
printf("格式控制字符串", 输出项1, 输出项2, ...);

2. 常用格式说明符

格式说明符 含义 适用类型 示例
%d 十进制整数 int printf("%d",123); → 输出123
%f 浮点数 float printf("%f",3.14); → 输出3.140000
%lf 双精度浮点数 double printf("%lf",3.1415926535); → 输出3.141593
%c 单个字符 char printf("%c",'A'); → 输出A
%lld 长整型整数 long long printf("%lld",10000000000LL); → 输出10000000000
%% 输出百分号% printf("占比:%d%%",50); → 输出占比:50%
%s 字符串 char[] printf("%s","Hello"); → 输出Hello

3. 扩展用法

(1)指定小数位数

%.nf 表示保留n位小数,自动四舍五入。

cpp 复制代码
printf("%.2f",3.1415);  // 输出3.14
(2)控制输出宽度与对齐
  • %nd:总宽度为n右对齐,不足补空格
  • %-nd:总宽度为n左对齐,不足补空格
  • %0nd:总宽度为n不足补前导零
cpp 复制代码
printf("%5d\n", 42);    // 右对齐,占5位:   42
printf("%-5d\n", 42);   // 左对齐,占5位:42   
printf("%05d\n", 42);   // 补前导零:00042

4. 常用转义字符

\n 表示换行,是最常用转义字符;其他常用转义字符:

  • \':输出单引号
  • \":输出双引号
  • \\:输出反斜杠
cpp 复制代码
#include <stdio.h>
int main() {
    printf("输出单引号:\'\n");
    printf("输出双引号:\"\n");
    printf("输出反斜杠:\\\n");
    return 0;
}

二、格式化输入 scanf

1. 基本语法

scanf 用于按指定格式读取输入数据,变量前必须加取地址符&(字符串数组除外)。

cpp 复制代码
scanf("格式控制字符串", &变量1, &变量2, ...);

2. 常用格式说明符

格式说明符 含义 适用类型 scanf 读取示例
%d 十进制整数 int int x; scanf("%d", &x);
%f 浮点数 float float x; scanf("%f", &x);
%lf 双精度浮点数 double double x; scanf("%lf", &x);
%c 单个字符 char char ch; scanf("%c", &ch);
%lld 长整型整数 long long long long x; scanf("%lld", &x);
%s 字符串 char[] char str[105]; scanf("%s", str);

三、例题详解

例题1:打印字符

题目描述

输入一个ASCII码,输出对应的字符。

输入格式

一个整数,即字符的ASCII码,保证存在对应的可见字符。

输出格式

一行,包含相应的字符。

输入样例1
复制代码
65
输出样例1
复制代码
A
输入样例2
复制代码
55
输出样例2
复制代码
7
参考代码
cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int main() {
    int c;
    cin >> c;
    printf("%c", c);
    return 0;
}

例题2:打印ASCII码

题目描述

输入一个除空格以外的可见字符(保证在函数scanf中可使用格式说明符%c读入),输出其ASCII码。

输入格式

一个除空格以外的可见字符。

输出格式

一个十进制整数,即该字符的ASCII码。

输入样例1
复制代码
A
输出样例1
复制代码
65
输入样例2
复制代码
7
输出样例2
复制代码
55
参考代码
cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
int main() {
    char c;
    cin >> c;
    printf("%d", c);
    return 0;
}

例题3:格式化输出1

题目描述

本题练习 printf 的基本格式化输出,请你读入一组不同类型的数据,并按指定格式输出。

需要使用的格式控制符:

  1. %d:十进制整数(int)
  2. %f:浮点数(float)
  3. %lf:双精度浮点数(double)
  4. %c:单个字符(char)
  5. %lld:长整型整数(long long)
  6. %%:输出百分号 %
输入格式

一行六个数据,依次为:

  1. 一个 int 类型的数字 a
  2. 一个 float 类型的数字 b
  3. 一个 double 类型的数字 c
  4. 一个 char 类型的字符 d
  5. 一个 long long 类型的数字 e
  6. 一个表示百分比数值的 int 类型的数字 p
输出格式

输出六行,格式如下:

int:a

float:b (保留6位小数)

double:c (保留6位小数)

char:d

longlong:e

rate:p%

输入样例1
复制代码
12 3.5 2.125 A 1234567890123 80
输出样例1
复制代码
int:12
float:3.500000
double:2.125000
char:A
longlong:1234567890123
rate:80%
参考代码
cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int a, p;
float b;
double c;
char d;
long long e;

int main() {
    cin >> a >> b >> c >> d >> e >> p;
    printf("int:%d\n", a);
    printf("float:%.6f\n", b);
    printf("double:%.6lf\n", c);
    printf("char:%c\n", d);
    printf("longlong:%lld\n", e);
    printf("rate:%d%%\n", p);
    return 0;
}

例题4:格式化输入2

题目描述

本题练习 scanf 的格式化输入,给你一段固定格式的英文句子,请从中提取出不同类型的数据,并输出。

英文句子固定格式:

My id is [int], score is [float], ratio is [double], grade is [char], coins are [long long], progress is [int]%.

需要提取的数据:[int]、[float]、[double]、[char]、[long long]、[int]

输入格式

一行英文句子,格式与题目描述完全一致。

输出格式

输出 6 行,每行 1 个数据。

  • 第 2 行(score,float)保留 5 位小数;
  • 第 3 行(ratio,double)保留 15 位小数。
输入样例1
复制代码
My id is 12, score is 3.5, ratio is 2.125, grade is A, coins are 1234567890123, progress is 80%.
输出样例1
复制代码
12
3.50000
2.125000000000000
A
1234567890123
80%
参考代码
cpp 复制代码
#include <bits/stdc++.h>
using namespace std;

int id, p;
float s;
double r;
char g;
long long c;

int main() {
    scanf("My id is %d, score is %f, ratio is %lf, grade is %c, coins are %lld, progress is %d%%.", 
          &id, &s, &r, &g, &c, &p);

    printf("%d\n", id);
    printf("%.5f\n", s);
    printf("%.15lf\n", r);
    printf("%c\n", g);
    printf("%lld\n", c);
    printf("%d%%\n", p);
    return 0;
}

致读者的一段话:

【以代码筑基,用思维破局,学遍有用新知】

告别枯燥啃书,和我一起轻松学 C++!

加入知识星球【编程思维社】,解锁:

✅从基础语法到算法入门,手把手带你学

✅专属答疑通道,学习难题不再卡壳

✅持续更新的干货资料 + 专属练习

目前,您觉得学习 C++ 最头疼的是哪部分?最想获得什么学习资料或服务?

您的反馈将直接决定我接下来的内容规划!

欢迎在知识星球【编程思维社】中与我分享,或者在评论区留言,我会尽快回复您。

相关推荐
AI人工智能+电脑小能手1 小时前
【大白话说Java面试题】【Java基础篇】第19题:HashMap的key如何减少发生哈希冲突
java·开发语言·后端·面试·哈希算法·hash-index·hash
Titan20241 小时前
C++位图学习笔记
c++·笔记·学习
6Hzlia1 小时前
【Hot 100 刷题计划】 LeetCode 148. 排序链表 | C++ 归并排序自顶向下
c++·leetcode·链表
自我意识的多元宇宙1 小时前
数据结构----插入排序
数据结构·算法·排序算法
im_AMBER1 小时前
Leetcode 162 除了自身以外数组的乘积 | 接雨水
开发语言·javascript·数据结构·算法·leetcode
Westward-sun.1 小时前
YOLO目标检测算法与mAP评估指标详解(附示例)
算法·yolo·目标检测
是个西兰花1 小时前
C++:异常
开发语言·c++·异常
cpp_25011 小时前
P1873 [COCI 2011/2012 #5] EKO / 砍树
数据结构·c++·算法·题解·二分答案·洛谷·csp
AI人工智能+电脑小能手1 小时前
【大白话说Java面试题】【Java基础篇】第18题:HashMap底层是如何扩容的
java·开发语言·面试·散列表·hash-index·hash