C++编程:循环、输入与字符处理全面解析
立即解锁
发布时间: 2025-08-20 01:48:51 阅读量: 1 订阅数: 3 


懒惰程序员的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)? ";
```
0
0
复制全文
相关推荐










