C++循环,直到输入特定的字符

C++ looping until a specific character is entered

本文关键字:字符 输入 循环 C++      更新时间:2023-10-16

我正在使用的书中的一个练习练习(重述关于各种循环的章节)指示我创建一个程序,不断要求用户输入单个字符。有两种规格:

  1. 当输入"$"字符时,程序应终止
  2. 程序应记录输入的周期数,并在程序终止时输出总数。基本上,整个想法是循环输入提示->计数周期->显示此计数,然后在输入"$"时终止程序

这是我的代码:

// Takes character input, tallies periods, stops on dollar sign
#include <iostream>
using namespace std;
int main() {
    char i; // input received
    int j = 0; // counter for # of periods
    cout << "This program will accept single-character entries and report the number of periods you've entered.n";
    for (;;) {
        do {
            cout << "Please enter a single character, using $ to stop: ";
            cin >> i;
            if(i == '.')
                j++;
        } while(i != '$');
    if(i == '$')
        cout << "Total number of periods entered is " << j << " .";
        break;
    }
    return 0;
}

程序运行良好,代码对我来说很有效,如果我错了,请纠正我。我觉得奇怪的是,在大多数代码中使用了无限for{}循环。本章使用了一两次,所以这是我目前所知的以这种方式生成循环函数的唯一方法。

也许这只是我对该语言缺乏经验,但使用带有(;;)的循环在C++中是一种典型的情况吗没有定义参数的循环的语法似乎对我需要做的事情有意义,但整个for(;;){}块对我来说仍然很奇怪。

不需要外循环或内循环后的if检查。

我也会在阅读时检查错误或EOF,因此会对其进行如下编码:

int periods;
char ch;
std::cout << "Please enter a single character, using $ to stop: ";
for (periods = 0; std::cin >> ch && ch != '$'; )
{
    if (ch == '.')
        periods++;
    std::cout << "Please enter a single character, using $ to stop: ";
}
std::cout << "Total number of periods entered is " << periods << " .";

for (;;)或其他类似while (1)的用法,我几乎只在书籍或代码示例片段中看到过。虽然我从未在成熟的程序中见过这种情况,但它可能只是不那么常见。不过,通常情况下,循环中至少有一个表达式(有时更多)。虽然只使用breaks是可能的,但它会影响可读性。考虑以下内容:

for (;;){
    // do some stuff here
    if (anexpression) break;
}

do {
    // do some stuff here
} while (anexpression);

哪一个可读性更强?我更喜欢后者,但这仍然只是一种意见。还有许多其他写循环的方法:

evaluateinput:
if (anexpression) goto evaluateinput;

Forever循环在电子产品中更常见。有时主甚至看起来像这样:

void main()
{
    Init();
    while (1);
}

在这种情况下,主函数等待处理中断。

通常我们不会使用永久循环,但这并不是一个糟糕的决定,只是不是解决问题的标准方法。

让我们说代码看起来:

while (1)
{
...
    if (condition)
        break;
}

我们可以更改为:

while (!condition)
{
...
}

在我们需要运行循环至少一次的情况下,我们可以使用do while循环。