「C++输入输出」笔记

embedded/2025/3/20 9:01:53/

参考:比特鹏哥

1. getchar和putchar

1.1 getchar

函数原型:int getchar(void)

1.1.1 头文件 <cstdio>

1.1.2 空格,换行都会当成字符读取

1.1.3 返回值类型为整型,读取失败返回E0F(-1)

#include<iostream>
#include<cstdio>int main()
{int ch = getchar();//读取失败://不做任何操作,直接点Ctrl+zcout << ch << endl;//实际上,getchar和putchar才是一对return 0;
}

1.2 putchar

1.2.1 函数原型:int putchar(int ch)

1.2.2 头文件 <cstdio>

1.2.3 失败,也返回EOF(-1)

#include<iostream>
#include<cstdio>int main()
{int ch = getchar();putchar(ch);putchar('\n');putchar('a');return 0;
}

2. scanf和printf

2.1 printf

用于设置输出格式

2.1.1 函数原型:int printf ( const char * format, ... );

2.1.2 头文件 <cstdio>

2.1.3 \n 换行符

#include<cstdio>int main()
{printf("holle world\n");return 0;
}

2.1.4 常见占位符

占位符类型
%dint(十进制整数)
%cchar(单个字符)
%s字符串
%ffloat/double(小数)
%Lflong double(小数)
%lldlong long int(十进制整数)
#include<cstdio>int main()
{printf("你好 %s 今天是星期%d\n","李华",2);return 0;
}

2.1.5 格式化输出

㈠ 控制宽度

⑴%5d

右对齐,至少保留五位,若超过五位则直接输出(其中5可替换为其他数字)

⑵%-5d

左对齐,至少保留五位,若超过五位则直接输出(其中5可替换为其他数字)

㈡ 控制小数位数

%.2f

保留两位小数(其中2可替换为其他数字)

㈢ " * "替代

eg. %*.*f

%5.2f

向右对齐,至少保留5位(小数点也算),保留两位小数

2.2 scanf

用于输入已知类型

2.2.1 函数原型:int scanf ( const char * format, ... );

2.2.2 头文件 <cstdio>

#include<cstdio>int main()
{
int d = 0;
scanf("%d",&d);return 0;
}

2.2.3 常用占位符

占位符类型
%dint
%c字符
%s字符串
%ffloat

%lf

double
%Lflong double
%[]

在方括号中指定一组字符(eg.%[a-z]或%[0-9])。

遇到不在集合中的字符时,输入会结束

注意

Ⅰscanf 函数中指定的格式和给程序输⼊的数据格式要严格匹配,否则可能不能得到想要的值

Ⅱ ‘&’---取地址操作符,scanf读取的是地址

Ⅲ %c 不忽略空白字符,总是返回第⼀个字符

     若想 %c 强制跳过字符前的空白字符,则需要将其写成'  %c'

Ⅳ scanf() 处理数值占位符时,会自动过滤空白字符,包括空格、制表符、换行符等

Ⅴ scanf原理: 输入的数据会先存储在缓存区,等到按下回车键后,按照占位符对缓存进行解读。

                      解读用户输入时,会从上一次解读剩下的第一个字符开始,直到读完缓存,或遇到第一个不符合条件的字符停止

2.2.4 返回值(整数)

读取成功,返回值为读取成功的变量个数

没有读取任何项或匹配失败,返回 0

若在成功读取任何数据前,发生读取错误或读取到文件结尾,则返回常量EOF(-1)

注意3,如果scanf前面读取失败,后面的scanf将不再读取

3. cin和cout

控制台(终端)上无论是输入还是输出显示的都是字符流,只有在程序中才有类型之分(eg.浮点型,整型...)

头文件 <iostream>

3.1 cin​​​​​​

(输入)当一行读取结束时,cin会自动换行,读取下一行内容

①cin格式

cin可以被用于while循环中当循环条件

cin >> 变量名; 会返回⼀个流对象的引用,就是cin。

C++里,流对象(像 cin ,它用于从标准输入读取数据)可被当作布尔值使用。

当流对象处于正常状态,也就是在读取数据过程中没有发生错误(如:没有遇到输入结束符、输入类型和要读取的类型匹配等情况)时,这个流对象的布尔值为 true ;反之,false 

因此,cin可以被用于while循环中当循环条件

//计算除空白字符外的字符串 
#include <iostream>
#include <string>
using namespace std;int main()
{string s;int t = 0;//输入并计算除空白字符外的字符串 while(cin >> s){t += s.size();}//输出cout << t << endl; return 0;} 

注意:在我们的电脑里,在换行后还要输入结束符(Windows系统中按 Ctrl + Z ,Linux或macOS系统中按 Ctrl + D 

 

3.2 cout

3.2.1 输出

cout格式

3.2.1 cout输出格式控制

它们的头文件都是 <iomanip>

ⅰ控制宽度和填充空白处

    setw:设置宽度,仅针对紧挨着的一项(默认右对齐)

    setfill:设置填充字符

   

ⅱ控制对齐方式

    right:右对齐

    left:左对齐

ⅲ 控制数值格式(常用:浮点数)

    fixed:固定小数点 浮点数

    scientific:科学计数法 浮点数

    setprecision:保留小数位数,一般与fixed一起使用

ⅳ 控制整数格式

    oct :八进制

    dec:十进制

    hex:十六进制

#include<iostream>
#include<iomanip>
using namespace std;int main()
{int a = 66, b = 77;cout << "八进制:" << oct << a << " " << b << endl;cout << "十进制:" << dec << a << " " << b << endl;//默认 cout << "十六进制:" << hex << a << " " << b << endl;  return 0;
}

2与3的对比

①格式差异

cout会自动忽略小数点后多余的0,不需要指定格式;printf函数打印浮点数,会默认打印六位小数,需要指定格式

②性能差异

scanf与printf比cin和cout快

一般,数据量10^6以内,用cin和cout与scanf和printf都行

          数据量10^9左右,用scanf和printf

③优化cin和cout

注意风险

1. ios::sync_with_stdio(false);

2. cin.tie(0);

#include <iostream>
using namespace std;int main()
{ios::sync_with_stdio(false);//取消C风格I/O同步 cin.tie(0);//解除cin和cout的绑定 int a;cin >> a;cout << "a: " << a << endl;return 0;
}

4. 竞赛:输入多组数据

4.1 输入多组未知数量的数据

可以利用while()+cin,来进行输入   [解释详见本篇 3.1cin ]

#include<iostream>
using namespace std;int main()
{int a, b;while(cin >> a >> b){cout << a + b << endl;}return 0;
}

4.2 输入多组指定结束符号的数据

①单个数据接收

#include <cstdio>int main()
{int ch;while((ch = getchar()) ! = '结束字符'){语句;}return 0;
}

②多个数据接收

//例如 输入:多组数据,一行两个数据,空格隔开,若输入 0 0,则结束输入
//     输出:每行两个数据的和
#include <iostream>
using namespace std;int main()
{int a, b;while(cin >> a >> b,a||b){cout << a + b << endl;}return 0;
}

⑴逗号表达式

1.从左到右以此计算

2.最终结果是最后一个的结果

⑵一些简化程序的函数

在C++中它们的头文件都是 <cctype>

1.检测大写字母  islower()

2.检测小写字母  isupper()

3.检测大小写字母 isalpha()

4.检测数字 isdigit()

5.检测空白字符 isspace()

 

 

 

 

 

 


http://www.ppmy.cn/embedded/174099.html

相关文章

利用大语言模型生成的合成数据训练YOLOv12:提升商业果园苹果检测的精度与效率

之前小编分享过关于《YOLO11-CBAM集成&#xff1a;提升商业苹果园树干与树枝分割的精准度》&#xff0c;改进YOLO11算法后&#xff0c;进行苹果树的实例分割。本期文章我们将分享关于最新的YOLO12算法改进的苹果目标检测。 论文题目&#xff1a;Improved YOLOv12 with LLM-Gen…

Metasploit Framework(MSF)使用教程与命令详解

Metasploit Framework&#xff08;简称MSF&#xff09;是一款功能强大的开源渗透测试工具&#xff0c;广泛应用于网络安全领域。它集成了大量的漏洞利用模块&#xff08;exploits&#xff09;、辅助模块&#xff08;auxiliary&#xff09;和载荷&#xff08;payloads&#xff0…

k8s主要控制器简述(一)ReplicaSet与Deployment

目录 一、ReplicaSet 关键特性 示例 解释 支持的 Operator 二、Deployment 1. 声明式更新 示例 2. 滚动更新 示例 3. 回滚 示例 4. ReplicaSet 管理 示例 5. 自动恢复 示例 6. 扩展和缩容 示例 示例 一、ReplicaSet ReplicaSet 是 Kubernetes 中的一个核心控…

Vue3 界面设计插件 microi-pageengine 入门教程一

系列文章目录 一、Vue3空项目快速集成 microi-pageengine 插件 文章目录 系列文章目录一、前言二、排版布局2.1 功能导航区2.2 组件容器区2.3 属性面板区 三、数据来源配置3.1 json数据源3.2 html数据源 四、事件穿透五、数据保存持久化六、总结 一、前言 上一篇文章介绍了 v…

阿里云平台服务器操作以及发布静态项目

目录&#xff1a; 1、云服务器介绍2、云服务器界面3、发布静态项目1、启动nginx2、ngixn访问3、外网访问测试4、拷贝静态资源到nginx目录下并重启nginx 1、云服务器介绍 2、云服务器界面 实例详情&#xff1a;里面主要显示云服务的内外网地址以及一些启动/停止的操作。监控&…

HarmonyOS NEXT个人开发经验总结

文章目录 1. 开发环境配置1.1 工具链安装流程1.2 环境配置代码 2. 项目架构设计2.1 分层架构图2.2 模块化配置 3. 核心开发实践3.1 声明式UI开发3.2 分布式数据管理 4. 性能优化策略4.1 性能优化流程图4.2 优化实践代码 5. 安全与权限管理5.1 权限申请流程5.2 安全存储示例 6. …

docker-compose install nginx(解决fastgpt跨区域)

CORS前言 CORS(Cross-Origin Resource Sharing,跨源资源共享)是一种安全措施,它允许或拒绝来自不同源(协议、域名、端口任一不同即为不同源)的网页访问另一源中的资源。它的主要作用如下: 同源策略限制:Web 浏览器的同源策略限制了从一个源加载的文档或脚本如何与另一…

go语言学习教程推荐,零基础到做项目

一、基础入门阶段 官方教程&#xff08;免费&#xff09; • A Tour of Go&#xff1a;交互式入门教程&#xff0c;边学边练 • Go by Example&#xff1a;通过300代码片段学习语法 入门书籍 • &#x1f4d8;《Go语言圣经》中文版&#xff08;免费在线阅读&#xff09;&#…