C语言格式化输入输出总结 (printf和scanf)

一、printf格式化输出

1. 整数格式化 (%d, %i, %u, %o, %x)

c复制代码

int num = 42;
// 以下为不同格式输出示例
printf("%d", num);      // 42 (十进制)
printf("%i", num);      // 42 (同%d)
printf("%u", num);      // 42 (无符号十进制)
printf("%o", num);      // 52 (八进制)
printf("%x", num);      // 2a (小写十六进制)
printf("%X", num);      // 2A (大写十六进制)
printf("%#x", num);     // 0x2a (带前缀)
printf("%05d", num);    // 00042 (补零)
printf("%-5d", num);    // "42   " (左对齐)
printf("%+d", num);     // +42 (显示符号)

2. 浮点数格式化 (%f, %e, %g)

c复制代码

double f = 3.1415926;
// 不同格式的浮点数输出示例
printf("%f", f);        // 3.141593 (默认6位)
printf("%.2f", f);      // 3.14 (保留2位)
printf("%8.3f", f);     // "   3.142" (总宽8)
printf("%e", f);        // 3.141593e+00 (科学计数)
printf("%.2E", f);      // 3.14E+00
printf("%g", f);        // 3.14159 (自动选择)
printf("%.3g", f);      // 3.14 (最多3位有效数字)

3. 字符和字符串

c复制代码

char c = 'A';
char s[] = "Hello";
// 字符与字符串输出示例
printf("%c", c);        // A
printf("%5c", c);       // "    A"
printf("%s", s);        // Hello
printf("%.3s", s);      // Hel (截断)
printf("%10s", s);      // "     Hello"
printf("%-10s", s);     // "Hello     "

二、scanf格式化输入

1. 基本输入格式

c复制代码

int a;
float b;
char c;
char str[20];// 基本类型输入示例
scanf("%d", &a);        // 读取整数
scanf("%f", &b);        // 读取浮点数
scanf("%c", &c);        // 读取单个字符
scanf("%s", str);       // 读取字符串(无空格)

2. 控制输入宽度

c复制代码

// 控制输入宽度示例
scanf("%5d", &a);       // 最多读取5位数字
scanf("%4f", &b);       // 最多读取4位浮点数
scanf("%10s", str);     // 最多读取10个字符

3. 跳过特定输入

c复制代码

int day, month, year;
// 跳过特定输入示例
scanf("%d/%d/%d", &day, &month, &year); // 输入12/05/2023
scanf("%d - %d - %d", &day, &month, &year); // 输入12 - 05 - 2023
scanf("%*s %d", &a);    // 跳过第一个字符串,读取第二个数字

4. 扫描集

c复制代码

char name[50];
// 扫描集示例
scanf("%[A - Za - z]", name);   // 只读取字母
scanf("%[^\n]", str);       // 读取整行(包括空格)

三、特殊格式控制

1. printf特殊格式

c复制代码

// printf特殊格式示例
printf("%p", &num);     // 输出指针地址
printf("%%");           // 输出%字符
printf("%*d", 5, 10);   // 宽度动态指定(5)

2. scanf特殊格式

c复制代码

int h, m, s;
// scanf特殊格式示例
scanf("%d:%d:%d", &h, &m, &s);  // 输入12:30:45
scanf("%[0 - 9]", str);           // 只读取数字
scanf("%*[ \t\n]%c", &c);       // 跳过空白字符

四、综合示例

1. printf示例

c复制代码

#include <stdio.h>
int main() {int id = 123;float score = 89.567;char grade = 'A';// 格式化输出示例printf("学号:%05d 成绩:%6.2f 等级:%c\n", id, score, grade);// 输出: 学号:00123 成绩: 89.57 等级:Areturn 0;
}

2. scanf示例

c复制代码

#include <stdio.h>
int main() {int year;char model[20];float price;printf("输入汽车信息(年份 型号 价格): ");scanf("%d %19s %f", &year, model, &price);// 格式化输出读取的信息printf("%d年款 %s 售价: %.2f万元\n", year, model, price);return 0;
}

五、格式说明符对比

说明符printf用途scanf用途
%d输出有符号十进制整数读取有符号十进制整数
%i同%d可读取十进制/八进制/十六进制
%u输出无符号十进制整数读取无符号十进制整数
%o输出八进制读取八进制
%x/%X输出十六进制读取十六进制
%f输出浮点数读取float
lf同%f (double)读取double
%e/%E科学计数法输出同%f
%g/%G自动选择%f或%e同%f
%c输出字符读取字符
%s输出字符串读取字符串(无空格)
%p输出指针地址
%[]扫描字符集合
%%输出%字符

六、注意事项

1. printf和scanf参数区别

  • printf传递变量值。
  • scanf传递变量地址(&)。

2. 缓冲区问题

c复制代码

int a; char c;
scanf("%d", &a);    // 输入后按回车
scanf("%c", &c);    // 会读取之前输入的回车
// 解决方法: scanf(" %c", &c); (添加空格)

3. 安全性

  • 使用scanf读取字符串时务必指定宽度:

c复制代码

char str[10];
scanf("%9s", str);  // 防止缓冲区溢出

4. 返回值

  • scanf返回成功读取的项目数。

c复制代码

if(scanf("%d %f", &a, &b)!= 2) {printf("输入错误!");
}

掌握这些格式化输入输出方法可以让你在C语言中更灵活地处理各种数据输入输出需求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/902106.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

哈夫曼编码和哈夫曼树

哈夫曼编码&#xff08;Huffman Coding&#xff09; 是一种基于字符出现频率的无损数据压缩算法&#xff0c;通过构建哈夫曼树&#xff08;Huffman Tree&#xff09; 来生成最优前缀编码&#xff0c;使得高频字符用短编码&#xff0c;低频字符用长编码&#xff0c;从而实现高效…

Jetson Orin NX 部署YOLOv12笔记

步骤一.创建虚拟环境 conda create -n yolov12 python3.8.20 注意&#xff1a;YOLOv12/YOLOv11/YOLOv10/YOLOv9/YOLOv8/YOLOv7a/YOLOv5 环境通用 步骤二.激活虚拟环境 conda activate yolov12 #激活环境 步骤三.查询Jetpack出厂版本 Jetson系列平台各型号支持的最高Jetp…

Linux指令篇 (2)

指令篇&#xff08;2&#xff09; Linux基本指令&#xff08;2&#xff09;(1) mkdir指令&#xff08;重要&#xff09;&#xff08;2&#xff09;rmdir指令&&rm指令(重要)&#xff08;3&#xff09;man指令(重要)&#xff08;4&#xff09;cp指令&#xff08;重要&…

致远OA——自定义开发rest接口

文章目录 :apple: 业务流程 &#x1f34e; 业务流程 代码案例&#xff1a; https://pan.quark.cn/s/57fa808c823f 官方文档&#xff1a; https://open.seeyoncloud.com/seeyonapi/781/https://open.seeyoncloud.com/v5devCTP/39/783.html 登录系统 —— 后台管理 —— 切换系…

区块链如何成为智能城市的底层引擎?从数据透明到自动化治理

区块链如何成为智能城市的底层引擎&#xff1f;从数据透明到自动化治理 引言&#xff1a;智能城市真的智能吗&#xff1f; 在数字化时代&#xff0c;智能城市&#xff08;Smart City&#xff09;逐步成为各国推动城市创新的重要方向。城市管理者希望借助物联网&#xff08;IoT…

洛谷P1177【模板】排序:十种排序算法全解(1)

扯谈 之前我已经把十大排序算法全讲了一遍&#xff08;具体详见专栏C排序算法&#xff09;,今天我们来用一道简单的题目总结实战一下。 算法实现 一、桶排序&#xff08;Bucket Sort&#xff09; ‌适用场景‌&#xff1a;数据范围已知且较小&#xff08;需根据测试数据调整…

SuperMap iClient3D for WebGL 如何加载WMTS服务

在 SuperMap iClient3D for WebGL 中加载WMTS服务时&#xff0c;参数配置很关键&#xff01;下面我们详细介绍如何正确填写参数&#xff0c;确保影像服务完美加载。 一、数据制作 对于上述视频中的地图制作&#xff0c;此处不做讲述&#xff0c;如有需要可访问&#xff1a;Onl…

再读bert(Bidirectional Encoder Representations from Transformers)

再读 BERT&#xff0c;仿佛在数字丛林中邂逅一位古老而智慧的先知。初次相见时&#xff0c;惊叹于它以 Transformer 架构为罗盘&#xff0c;在预训练与微调的星河中精准导航&#xff0c;打破 NLP 领域长久以来的迷雾。而如今&#xff0c;书页间跃动的不再仅是 Attention 机制精…

从零开始 保姆级教程 Ubuntu20.04系统安装MySQL8、服务器配置MySQL主从复制、本地navicat远程连接服务器数据库

从零开始&#xff1a;Ubuntu 20.04 系统安装 MySQL 8、服务器配置 MySQL 主从复制、本地 Navicat 远程连接服务器数据库 初始化服务器1. 更新本地软件包列表2. 安装 MySQL 服务器3. 查看 MySQL 安装版本4. 登录 MySQL 管理终端5. 设置 root 用户密码&#xff08;推荐使用 nativ…

java怎么完善注册,如果邮箱中途更换,能否判断

解析在下面 附赠代码 private static class CodeInfo {String code;long timestamp;CodeInfo(String code, long timestamp) {this.code code;this.timestamp timestamp;}}// 存储验证码&#xff08;邮箱 -> 验证码信息&#xff09;(保证线程安全) 以免中途更改邮箱pri…

n8n 中文系列教程_01. 简单易懂的现代AI魔法,n8n的快速了解与概念科普(文末有彩蛋)

1. 教程简介 欢迎来到“无代码工具探索”课程&#xff0c;这是专为非技术人员设计的指南&#xff08;当然&#xff0c;技术人员也可以从中受益&#xff09;。我们的目标是通过无代码工具来提升工作效率&#xff0c;尤其是利用像 n8n 这样的灵活数据库平台。这些工具被誉为“现…

解码 Web Service:从技术原理到应用场景的深度剖析

Web Service 是一种基于网络的、分布式的计算技术&#xff0c;它允许不同的应用程序之间通过网络进行通信和交互。以下是关于 Web Service 的详细介绍&#xff1a; 一、定义与概念 Web Service 是一种可以通过 Web 协议&#xff08;如 HTTP&#xff09;进行访问的软件组件&am…

Nacos启动报错

Nacos启动是在单机模式下&#xff0c;不是集群模式 点击startup.cmd启动会报错 打开bin目录 rem是注释的意思&#xff0c;在nacos1.3.2之后&#xff0c;nacos默认的都是集群模式&#xff0c;我们这里单机测试就是用单机模式。 也可以修改MODE&#xff0c;如果选择不修改&…

uniapp-商城-26-vuex 使用流程

为了能在所有的页面都实现状态管理&#xff0c;我们按照前面讲的页面进行状态获取&#xff0c;然后再进行页面设置和布局&#xff0c;那就是重复工作&#xff0c;vuex 就会解决这样的问题&#xff0c;如同类、高度提炼的接口来帮助我们实现这些重复工作的管理。避免一直在造一样…

Git 命令速查手册

听说用美图可以钓读者&#xff1f; 一、基础操作核心命令 1. 仓库初始化与克隆 命令作用示例git init创建新仓库git init my-projectgit clone克隆远程仓库git clone [https://github.com/user/repo.git](https://github.com/user/repo.git)git remote add关联远程仓库git re…

信息量、香农熵、交叉熵、KL散度总结

信息量 对于一个事件而言&#xff0c;它一般具有三个特征&#xff1a; 小概率事件往往具有较大的信息量 大概率事件往往具有较小的信息量 独立事件的信息量相互可以相加 比如我们在买彩票这个事件中&#xff0c;彩票未中奖的概率往往很高&#xff0c;对我们而言一点也不稀…

使用C语言的cJSON中给JSON字符串添加转义

在 cJSON 库中&#xff0c;没有直接提供 一个函数来专门给 JSON 字符串添加转义&#xff08;如将 " 转义为 \"&#xff0c;\n 转义为 \\n 等&#xff09;。 但 cJSON 在 序列化&#xff08;cJSON_Print 或 cJSON_PrintUnformatted&#xff09; 时会自动处理转义字符…

宇树机器狗go2—slam建图(1)点云格式

0.前言 上一篇番外文章教大家如何在宇树机器狗go2的gazebo仿真环境中实现简单的导航运动&#xff0c;本期文章会教大家如何让宇树的机器狗go2在仿真环境中进行slam建图时经常会遇到的一些点云格式&#xff0c;在后续的slam建图和slam算法解析的时候会经常与这些点云信息打交道…

linux socket编程之udp(实现客户端和服务端消息的发送和接收)

目录 一.创建socket套接字(服务器端) 二.bind将prot与端口号进行绑定(服务器端) 2.1填充sockaddr_in结构 2.2bind绑定端口 三.直接通信(服务器端) 3.1接收客户端发送的消息 3.2给客户端发送消息 四.客户端通信 4.1创建socket套接字 4.2客户端bind问题 4.3直接通信即可…

第1期:Python基础语法入门

1.1 Python简介 Python是一种解释型、面向对象、动态数据类型的高级编程语言。它设计简洁&#xff0c;易于学习&#xff0c;适合初学者。Python广泛应用于数据科学、人工智能、Web开发、自动化脚本等领域。它的语法简洁易懂&#xff0c;强调代码的可读性。 1.2 安装Python与配…