侯捷 C++ 课程学习笔记:C++输入输出

C++输入输出

目录

C++输入输出

前言

本篇目标

重难点说明

学习正文

一、基本输入输出

二、格式化输出

三、字符串处理

​编辑

四、cerr/clog与cout的区别

练习题

单选题-5

多选题-3

判断题-2

代码题-1

参考答案: 

C++的优势对比于python的维度点说明


前言

本系列文章目的在于将C++的基础内容完全夯实,最终目的是为后期的深度学习在算法上有一定的铺垫,前期在学习数学的过程中也会有很大的帮助,相对于python来说C++有自身的优势,文末会有 C++的优势对比于python的维度点说明,所以我这里先写了C++的用法说明,后续会有Python的,各自有各自的优势,我们要根据具体的需求来分析使用哪种语言更为方便,其它的语言暂时不在考虑范畴之内,我们的目标是AI深度学习。

前置环境与代码结构文章:

1、C++环境理解与配置(MinGW)

2、C++的Visual Studio Code运行环境配置

3、头文件与类的声明

整体文章目录:入门 C++ 课程目录

本篇目标

  1. 掌握cin/cout的基本使用方法
  2. 理解C++流的概念及其优势
  3. 学会使用格式化输出方法
  4. 能处理常见输入输出问题
  5. 了解cerr/clog与cout的区别

重难点说明

重点

cin与cout的标准输入输出
格式化输出(setw/setprecision等)
字符串输入(cin与getline的区别)
难点

流操作符(<</>>)的重载原理
输入缓冲区的处理
格式标志的持久性影响

学习正文

一、基本输入输出

#include <iostream>
using namespace std;

int main() {
    int num;
    cout << "输入一个数字: ";  // 输出提示
    cin >> num;                  // 输入数字
    cout << "You entered: " << num << endl;
    return 0;
}

二、格式化输出

#include <iostream>
#include <iomanip>
using namespace std;

int main() {
    int num;
    cout << "输入一个数字: ";  // 输出提示
    cin >> num;                  // 输入数字
    cout << "You entered: " << num << endl;
    cout << fixed << setprecision(2);  // 固定小数位
    cout << "Price: $" << setw(8) << 19.99 << endl;  // 设置宽度
    return 0;
}

三、字符串处理

#include <iostream>
#include <iomanip>
#include <limits> // 添加这一行以使用 numeric_limits
using namespace std;

int main() {
    string name;
    cout << "输入name: ";// 请输入英文,中文会乱码
    cin.ignore(numeric_limits<streamsize>::max(), '\n'); // 先回车清除缓冲区残留的换行符
    getline(cin, name);  // 读取整行(含空格)
    cout << "name: " << name << endl;
    return 0;
}

四、cerr/clog与cout的区别

特性cerrclogcout
输出目标标准错误流(无缓冲)标准错误流(带缓冲)标准输出流(带缓冲)
缓冲方式无缓冲(立即输出)有缓冲(缓冲区满或手动刷新)有缓冲(缓冲区满或手动刷新)
典型用途错误信息、紧急输出日志记录、非紧急错误信息常规程序输出
是否可重定向默认输出到终端,但可重定向同 cerr可重定向到文件或其他设备
刷新方式每次插入操作后自动刷新需手动刷新(flush ()/endl)需手动刷新(flush ()/endl)
关联设备通常与终端关联(stderr)同 cerr通常与终端关联(stdout)
性能影响实时输出,性能较低缓冲机制,性能较高缓冲机制,性能较高
示例代码cerr << "Error!" << endl;clog << "Log info" << endl;cout << "Hello" << endl;

练习题

单选题-5

  1. C++标准输入输出头文件是:
    A. stdio.h B. iostream C. streamio D. console.h

  2. 输出换行的最佳方式是:
    A. "\n" B. endl C. "\r\n" D. 根据系统选择

  3. setw(5)的作用是:
    A. 设置小数精度 B. 填充字符 C. 字段宽度 D. 进制转换

  4. 要读取含空格的字符串应使用:
    A. cin >> B. scanf() C. gets() D. getline()

  5. cerr与cout的主要区别是:
    A. 输出位置 B. 缓冲方式 C. 支持数据类型 D. 速度

多选题-3

  1. 哪些属于格式化函数(头文件iomanip):
    A. setw B. fixed C. precision D. left

  2. 使用cin输入时可能遇到的情况:
    A. 自动跳过空白符
    B. 类型不匹配导致错误
    C. 缓冲区残留数据
    D. 自动转换进制

  3. 正确的输入验证方法包括:
    A. 检查返回值
    B. 使用try-catch
    C. 清空缓冲区
    D. 设置cin异常

判断题-2

  1. cin.get()可以读取单个字符包括空格( )
  2. cerr默认立即刷新缓冲区( )

代码题-1

编写程序:输入圆的半径,输出面积(保留3位小数),要求:

  1. 处理非数字输入
  2. 半径必须>0
  3. 输出格式示例:"Area: 12.566"

参考答案: 

单选题:B A C D B
多选题:AD, ABC, AC
判断题:√ √

代码题参考

#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;

int main() {
    double r;
    while (true) {
        cout << "请输入半径 (>0): ";
        if (cin >> r && r > 0) break;
        cin.clear();
        cin.ignore(1024, '\n');
        cout << "输入无效!" << endl;
    }
    cout << fixed << setprecision(3);
    cout << "面积: " << M_PI * r * r << endl;
    return 0;
}

C++的优势对比于python的维度点说明

对比维度C++ 优势Python 情况
性能效率1. 执行速度快:编译型语言,将代码编译为机器码,处理大量数据、复杂算法时效率高,能充分利用硬件资源。
2. 内存管理精细:允许程序员直接管理内存,精确控制分配和释放,优化内存使用,适合对内存要求苛刻的系统。
1. 执行速度慢:解释型语言,代码逐行解释执行,在处理大规模数据和复杂计算时性能较差。
2. 内存管理自动化:Python 有自动的垃圾回收机制,虽然方便但可能导致内存使用不够精细,在内存紧张的场景下可能出现问题。
底层控制能力1. 硬件访问能力强:可直接访问计算机硬件资源,如寄存器、内存地址等,便于与底层硬件高效交互,适用于驱动程序、嵌入式系统开发。
2. 系统级编程优势:在操作系统、编译器、数据库管理系统等系统软件开发中,能与底层系统更好交互,实现资源精细管理和控制,提升系统性能和稳定性。
底层控制能力弱:Python 主要用于高层级的应用开发,对底层硬件的直接访问能力有限,在系统级编程方面不够灵活和高效。
语言特性1. 强类型语言:编译时进行严格类型检查,有助于发现早期错误,提高代码稳定性和可靠性,减少运行时类型不匹配错误。
2. 支持多种编程范式:支持面向对象、泛型、函数式等多种编程范式,开发者可根据问题和需求灵活选择。
1. 动态类型语言:类型检查在运行时进行,虽然编写代码更灵活,但可能在运行时出现类型相关的错误,代码的稳定性和可维护性相对较弱。
2. 编程范式相对有限:主要以面向对象和函数式编程为主,泛型编程的支持不如 C++ 强大。
可移植性1. 跨平台能力:编写的代码可在不同操作系统上编译运行,只要有相应编译器和运行时环境,适合开发跨平台应用。
2. 库的可移植性:许多开源库和框架(如 Boost、Qt)具有良好可移植性,可在不同平台使用,减少跨平台开发工作量。
1. 跨平台性依赖解释器:Python 代码的跨平台性依赖于 Python 解释器,虽然大多数情况下能在不同操作系统上运行,但在一些涉及底层系统调用的场景下可能会有兼容性问题。
2. 部分库存在兼容性问题:虽然 Python 有丰富的库,但部分库在不同平台上的表现和兼容性可能存在差异。
生态系统和工具链1. 成熟的开发工具:有 Visual Studio、CLion、Eclipse 等成熟开发工具和集成开发环境,提供强大代码编辑、调试、性能分析等功能,提高开发效率。
2. 丰富的库资源:拥有大量专业级库,如用于数学计算的 LAPACK、图形处理的 OpenGL、网络编程的 ACE 等,为专业领域开发提供支持。
1. 开发工具相对简单:Python 的开发工具(如 PyCharm、VS Code 等)功能相对侧重于代码编辑和基本调试,在一些复杂的性能分析和底层调试方面不如 C++ 的开发工具强大。
2. 库更侧重于高层应用:Python 的库主要用于数据分析、机器学习、Web 开发等高层应用场景,在底层系统编程和高性能计算方面的专业库相对较少。
安全性和稳定性1. 资源管理安全:通过智能指针等机制,一定程度上保证资源安全管理,避免内存泄漏和悬空指针问题,提升程序稳定性和安全性。
2. 代码审查严格:语法相对复杂,在大型项目中严格的代码审查和规范可确保代码质量和安全性,减少潜在漏洞和风险。
1. 资源管理自动化存在隐患:自动垃圾回收机制可能导致一些资源管理问题,例如循环引用可能会造成内存泄漏,虽然 Python 有解决方案,但增加了复杂性。
2. 代码灵活性带来风险:动态类型和简洁的语法使得代码编写容易,但也可能导致代码的可读性和可维护性下降,增加了出现安全漏洞的风险。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值