【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 str105; 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%.

需要提取的数据:intfloatdoublecharlong longint

输入格式

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

输出格式

输出 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++ 最头疼的是哪部分?最想获得什么学习资料或服务?

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

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

相关推荐
xieliyu.1 小时前
Java算法精讲:双指针(三)
java·开发语言·算法
一条小锦吕*1 小时前
基于Spring Boot + 数据可视化 + 协同过滤算法的推荐系统设计与实现(源码+论文+部署全讲解)
spring boot·算法·信息可视化
CryptoPP2 小时前
快速对接东京证券交易所API数据:实战指南与代码示例
开发语言·人工智能·windows·python·信息可视化·区块链
ZC跨境爬虫2 小时前
跟着 MDN 学JavaScript day_7:数学运算与逻辑判断实战测试
开发语言·前端·javascript·学习·ecmascript
如竟没有火炬3 小时前
最大矩阵——单调栈
数据结构·python·线性代数·算法·leetcode·矩阵
阳区欠3 小时前
【LangChain】LLM基础介绍
开发语言·python·langchain
Jinkxs3 小时前
Java 跨域14-Java 与区块链(Hyperledger)集成
java·开发语言·区块链
8Qi84 小时前
LeetCode 1143 & 718:最长公共子序列 / 最长重复子数组
算法·leetcode·职场和发展·动态规划
绿算技术4 小时前
万卡推理集群存储选型分析:从核心架构到应用视角
大数据·科技·算法·架构
晨曦中的暮雨4 小时前
Golang速通(Javaer版)
java·开发语言·后端·golang