0

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

  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(;;){} 块对我来说仍然看起来很奇怪。

4

3 回答 3

4

不需要外循环或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 << " .";
于 2013-06-30T06:51:31.853 回答
1

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

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

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

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

evaluateinput:

if (anexpression) goto evaluateinput;
于 2013-06-30T07:16:46.957 回答
1

Forever 循环在电子设备上更为常见。有时 main 甚至看起来像这样:

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

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

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

让我们说一下看起来的代码:

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

我们可以改成:

while (!condition)
{
...
}

如果我们需要至少运行一次循环,我们可以使用 do-while 循环。

于 2013-06-30T09:58:42.530 回答