活动介绍

C++编程:循环、输入与字符处理全面解析

立即解锁
发布时间: 2025-08-20 01:48:51 阅读量: 1 订阅数: 3
PDF

懒惰程序员的C++入门指南

### C++ 编程:循环、输入与字符处理全面解析 #### 1. 键盘输入 在 C++ 编程里,键盘输入是很基础的操作。以下代码示例展示了如何从键盘获取用户输入的年龄: ```cpp int ageInYears; sout << "How old are you? "; ssin >> ageInYears; ``` 上述代码会先输出询问年龄的提示信息,接着等待用户通过键盘输入。若用户输入的是数字,该数字会被存储在 `ageInYears` 变量中;若输入的不是数字,`ageInYears` 很可能会被赋值为 0。`ssin` 在处理输入前会等待用户按下回车键,所以允许用户使用退格键修改输入内容。 `ssin` 和 `sout` 使用相同的字体和光标,它们都属于 SSDL 的一部分。需要注意的是,`<<` 箭头的方向:对于 `sout`,箭头从值指向输出;对于 `ssin`,箭头从输入指向变量。 这里引入一个新的基本数据类型:`char`(字符类型)。`char` 类型的示例包括 `'A'`、`'a'`(二者不同)、`'?'`、`'1'`、`' '`(空格字符)以及 `'\n'`。下面是使用 `char` 变量的代码示例: ```cpp char answer; sout << "Are you sure (Y/N)? "; ssin >> answer; if (answer == 'y') sout << "Are you *really* sure?\n"; ``` 你还可以使用 `>>` 来链式读取输入内容: ```cpp ssin >> firstThingReadIn >> secondThingReadIn; ``` 无论读取的是字符还是数字,`ssin` 都会跳过空白字符(空格、制表符和换行符),所以你可以在输入内容之间添加空格,它也能正常处理。 下面是一个使用 `ssin` 的示例程序: ```cpp //Program to insult the user based on input // -- from _C++ for Lazy Programmers_ #include "SSDL.h" int main (int argc, char** argv) { int ageInYears = 0; sout << "Let's see if you can handle the truth.\n"; sout << "How old are you? "; ssin >> ageInYears; bool isOlder = (ageInYears >= 20); //Seriously? Well, 20 *is* old if you're a computer program if (isOlder) sout << "The truth is you are OLD.\n"; else sout << "You're not old enough. Sorry, kid.\n"; sout << "Hit any key to end.\n"; SSDL_WaitKey (); return 0; } ``` #### 2. 常见错误处理 在编程过程中,可能会遇到各种错误。例如,当你看到如下一串错误信息时: ```plaintext main.cpp: In function 'int main(int, char**)': main.cpp:11:39: error: no match for 'operator<<' (operand types are 'std::istream' {aka 'std::basic_istream<char>'} and 'int') sout << "How old are you? "; ssin << ageInYears; ~~~~~^~~~~~~~~~~~~ main.cpp:11:39: note: candidate: 'operator<<(int, int)' <built-in> main.cpp:11:39: note: no known conversion for argument 1 from 'std::istream' {aka 'std::basic_istream<char>'} to 'int' ``` 这通常是因为 `ssin` 语句中的 `>>` 方向使用错误,正确的应该是 `ssin >> ageInYears`。编译器有时会因为这类错误而产生大量混乱的错误信息。 另外,如果你尝试使用 `ssin >> "\n"` 或者输入的不是变量,也会引发大量错误。 #### 3. 练习 以下是一些相关的练习,你可以通过这些练习来巩固所学知识: 1. 编写一个程序,使用公式 `C = (F - 32) * (5 / 9)` 将华氏温度转换为摄氏温度。让程序具有交互性,即询问用户需要转换的温度。 2. 编写一个程序,根据用户输入的年龄或出生年份,确定用户所属的世代(如 Z 世代、千禧一代等),你可以自行设定各世代的年龄范围。 3. 身体质量指数(BMI)可以判断一个人是偏重、偏瘦还是处于正常范围。官方的 BMI 范围如下: | 体重状况 | BMI 范围 | | ---- | ---- | | 体重过轻 | 小于 18.5 | | 正常体重 | 18.5 - 25 | | 超重 | 25 - 30 | | 肥胖 | 30 及以上 | 编写一个程序,根据公式 `BMI = 体重(kg)/(身高(m)的平方)` 计算用户的 BMI。如果你所在的国家使用英制单位,还需要知道以下换算信息:1 kg = 2.2 磅,1 米 = 39.37 英寸。 4. 让用户输入两个一位十六进制数字,然后返回它们的十进制和。在十六进制中,`'A'` 表示 10,`'B'` 表示 11,`'C'` 表示 12,以此类推,`'F'` 表示 15。 5. 编写一个程序,询问用户两个时间(如 1:06 或 12:19),并以规范的格式输出这两个时间的差值(如 11:03 或 0:40,而不是 13:0 或 -12:70)。 6. 不询问用户时间,而是测量用户两次按下回车键的时间,使用如下代码获取当前系统时间: ```cpp #include <ctime> long long int myTime = time (nullptr); ``` 这个时间是从 1970 年 1 月 1 日午夜开始计算的秒数。 #### 4. while 和 do - while 循环 在编程中,程序可以在条件为真时执行某些操作,也可以在条件为真的期间持续执行某些操作。下面是一个使用 `while` 循环的示例,用于确定一个数字在除以 10 多少次后会得到 1(这等同于该数字的位数): ```cpp int digits = 0; while (number > 1) //while we haven't reached 1 { number /= 10; //divide it by 10 digits += 1; //that's one more digit! } ``` `while` 语句的 Backus - Naur 形式(BNF)为: ```plaintext while (<condition>) <action> ``` 只要条件为真,`while` 循环就会执行 `action`;当条件不再为真时,循环结束,程序会继续执行后续代码。 `do - while` 循环是 `while` 循环的一种变体,它和 `while` 循环的区别在于,`do - while` 循环会先执行一次 `action`,然后再检查条件。其 BNF 形式为: ```plaintext do <action> while (<condition>) ``` 以下是一个 `do - while` 循环的示例: ```cpp do { sout << "Ready to rumble (Y/N)? "; ```
corwn 最低0.47元/天 解锁专栏
赠100次下载
继续阅读 点击查看下一篇
profit 400次 会员资源下载次数
profit 300万+ 优质博客文章
profit 1000万+ 优质下载资源
profit 1000万+ 优质文库回答
复制全文

相关推荐

sun海涛

游戏开发工程师
曾在多家知名大厂工作,拥有超过15年的丰富工作经验。主导了多个大型游戏与音视频项目的开发工作;职业生涯早期,曾在一家知名游戏开发公司担任音视频工程师,参与了多款热门游戏的开发工作。负责游戏音频引擎的设计与开发,以及游戏视频渲染技术的优化和实现。后又转向一家专注于游戏机硬件和软件研发的公司,担任音视频技术负责人。领导团队完成了多个重要的音视频项目,包括游戏机音频引擎的升级优化、视频编解码器的集成开发等。
最低0.47元/天 解锁专栏
赠100次下载
百万级 高质量VIP文章无限畅学
千万级 优质资源任意下载
千万级 优质文库回答免费看

最新推荐

【调试与性能优化】:LMS滤波器在Verilog中的实现技巧

![【调试与性能优化】:LMS滤波器在Verilog中的实现技巧](https://img-blog.csdnimg.cn/img_convert/b111b02c2bac6554e8f57536c89f3c05.png) # 摘要 本文详细探讨了最小均方(LMS)滤波器的理论基础、硬件实现、调试技巧以及性能优化策略,并通过实际案例分析展示了其在信号处理中的应用。LMS滤波器作为一种自适应滤波器,在数字信号处理领域具有重要地位。通过理论章节,我们阐述了LMS算法的工作原理和数学模型,以及数字信号处理的基础知识。接着,文章介绍了LMS滤波器的Verilog实现,包括Verilog语言基础、模块

【机器人灵巧手自学习能力】:AI在抓取技术中的应用探索

![AI自学习能力](https://ai-kenkyujo.com/wp-content/uploads/2021/08/29-2-%E6%95%99%E5%B8%AB%E3%81%AA%E3%81%97%E5%AD%A6%E7%BF%92%E3%81%A8%E3%81%AF_%E4%BF%AE%E6%AD%A3.png.webp) # 摘要 机器人灵巧手的自学习能力是近年来机器人技术领域中一个快速发展的研究领域。本文首先概述了自学习能力的基本概念及其在机器人技术中的重要性。接着,深入探讨了自学习技术的理论基础,包括自学习机制的基本原理、算法选择以及系统的训练与评估方法。在第三章中,文章详

【Matlab优化算法实战】:精通Matlab实现复杂问题优化的技巧

![【Matlab优化算法实战】:精通Matlab实现复杂问题优化的技巧](https://img-blog.csdnimg.cn/baf501c9d2d14136a29534d2648d6553.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5Zyo6Lev5LiK77yM5q2j5Ye65Y-R,size_20,color_FFFFFF,t_70,g_se,x_16) # 摘要 本文全面概述了Matlab优化算法的理论基础、实践操作以及高级应用。首先,介绍了数学优化问题的分类和优化

Simulink专家指南:OFDM模型构建与调试的终极技巧

![Simulink专家指南:OFDM模型构建与调试的终极技巧](https://de.mathworks.com/company/technical-articles/wireless-transceiver-design-and-network-modeling-in-simulink/_jcr_content/mainParsys/image_1354781049_cop.adapt.full.medium.jpg/1714297948399.jpg) # 摘要 本文对Simulink环境下正交频分复用(OFDM)模型的构建、调试和应用进行了系统性阐述。首先介绍了Simulink基础与

构建可扩展医疗设备集成方案:飞利浦监护仪接口扩展性深入解析

![构建可扩展医疗设备集成方案:飞利浦监护仪接口扩展性深入解析](https://media.licdn.com/dms/image/D4D12AQHs8vpuNtEapQ/article-cover_image-shrink_600_2000/0/1679296168885?e=2147483647&v=beta&t=NtAWpRD677ArMOJ_LdtU96A1FdowU-FibtK8lMrDcsQ) # 摘要 本文探讨了医疗设备集成的重要性和面临的挑战,重点分析了飞利浦监护仪接口技术的基础以及可扩展集成方案的理论框架。通过研究监护仪接口的技术规格、数据管理和标准化兼容性,本文阐述了实

【C#跨平台开发与Focas1_2 SDK】:打造跨平台CNC应用的终极指南

![Focas1_2 SDK](https://www.3a0598.com/uploadfile/2023/0419/20230419114643333.png) # 摘要 本文全面介绍了C#跨平台开发的原理与实践,从基础知识到高级应用,详细阐述了C#语言核心概念、.NET Core与Mono平台的对比、跨平台工具和库的选择。通过详细解读Focas1_2 SDK的功能与集成方法,本文提供了构建跨平台CNC应用的深入指南,涵盖CNC通信协议的设计、跨平台用户界面的开发以及部署与性能优化策略。实践案例分析部分则通过迁移现有应用和开发新应用的实战经验,向读者展示了具体的技术应用场景。最后,本文对

STM8点阵屏汉字显示:用户界面设计与体验优化的终极指南

![STM8点阵屏汉字显示:用户界面设计与体验优化的终极指南](http://microcontrollerslab.com/wp-content/uploads/2023/06/select-PC13-as-an-external-interrupt-source-STM32CubeIDE.jpg) # 摘要 STM8点阵屏技术作为一种重要的显示解决方案,广泛应用于嵌入式系统和用户界面设计中。本文首先介绍STM8点阵屏的技术基础,然后深入探讨汉字显示的原理,并着重分析用户界面设计策略,包括布局技巧、字体选择、用户交互逻辑及动态效果实现等。接着,本文详细阐述了STM8点阵屏的编程实践,涵盖开

【游戏物理引擎基础】:迷宫游戏中的物理效果实现

![基于C++-EasyX编写的益智迷宫小游戏项目源码.zip](https://images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com/f/7eae7ef4-7fbf-4de2-b153-48a18c117e42/d9ytliu-34edfe51-a0eb-4516-a9d0-020c77a80aff.png/v1/fill/w_1024,h_547,q_80,strp/snap_2016_04_13_at_08_40_10_by_draconianrain_d9ytliu-fullview.jpg?token=eyJ0eXAiOiJKV1QiLCJh

【wxWidgets多媒体处理】:实现跨平台音频与视频播放

![【wxWidgets多媒体处理】:实现跨平台音频与视频播放](https://media.licdn.com/dms/image/D4D12AQH6dGtXzzYAKQ/article-cover_image-shrink_600_2000/0/1708803555419?e=2147483647&v=beta&t=m_fxE5WkzNZ45RAzU2jeNFZXiv-kqqsPDlcARrwDp8Y) # 摘要 本文详细探讨了基于wxWidgets的跨平台多媒体开发,涵盖了多媒体处理的基础理论知识、在wxWidgets中的实践应用,以及相关应用的优化与调试方法。首先介绍多媒体数据类型与

【BT-audio音频抓取工具比较】:主流工具功能对比与选择指南

# 摘要 本文旨在全面介绍BT-audio音频抓取工具,从理论基础、功能对比、实践应用到安全性与隐私保护等多个维度进行了深入探讨。通过分析音频信号的原理与格式、抓取工具的工作机制以及相关法律和伦理问题,本文详细阐述了不同音频抓取工具的技术特点和抓取效率。实践应用章节进一步讲解了音频抓取在不同场景中的应用方法和技巧,并提供了故障排除的指导。在讨论工具安全性与隐私保护时,强调了用户数据安全的重要性和提高工具安全性的策略。最后,本文对音频抓取工具的未来发展和市场需求进行了展望,并提出了选择合适工具的建议。整体而言,本文为音频抓取工具的用户提供了一个全面的参考资料和指导手册。 # 关键字 音频抓取;