用for循环替换while循环

时间:2018-11-24 04:41:12

标签: c++

问题提出:重写前面的字符值示例尝试使用for语句。

话虽如此,我为上一个问题写的内容也如下:

#include "pch.h"
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include "cmath"

using namespace std;

int main()
{
    char letter = 'a';
    int i = 97;

    while (i < 123) {
        cout << letter << '\t' << i << '\n';
        i = i + 1;
        letter = letter + 1;

      }
}

编辑:一整夜都在考虑之后,我进行了一些更改:

int main()
{
    char letter = 'a';

    for (int i = 97; i < 123; i = i + 1)
        cout << letter << '\t' << i << '\n';
        letter = letter + 1;
}

所以这仍然是错误的,但是我已经接近了。我很难在 char 类型计数上设置控制变量,并且难以与 int 变量计数器对齐。我做错了什么事?

1 个答案:

答案 0 :(得分:3)

所以您现在缺少的只是大括号:

int main()
{
    char letter = 'a';

    for (int i = 97; i < 123; i = i + 1)
    {
        cout << letter << '\t' << i << '\n';
        letter = letter + 1;
    }
}

所有这些控制结构都需要一个语句块(例如ifelseforwhile)。用大括号括起来的语句块。但是,所有这些控件也都接受单个语句而不是语句块。因此,如果for(...)之后没有左括号,则仅将下一条语句视为循环迭代的一部分。但是在您的情况下,您希望在每次循环迭代中都执行以下两个语句,因此需要大括号。优良作法是始终使用大括号,即使循环主体中只有一个语句也是如此。

从您的早期版本开始,您似乎希望在i循环中同时包含letterfor作为循环变量。这在某种程度上是可能的,但是各个语句必须位于;之间的匹配部分中,例如:

int main()
{
    char letter = 'a';

    for (int i = 97; i < 123; i = i + 1, letter = letter + 1)
    {
        cout << letter << '\t' << i << '\n';
    }
}

int main()
{
    char letter;
    int i;

    for (i = 97, letter='a'; i < 123; i = i + 1, letter = letter + 1)
    {
        cout << letter << '\t' << i << '\n';
    }
}

但是,您不能在一个for语句中声明两个不同类型的变量。

除了for循环的问题之外:我手头的练习没有参考,但是真的需要同时迭代iletter吗?似乎您在letter中持有i的ASCII整数表示形式,因此您可以迭代iletter,删除另一个,然后在您的输出:

int main()
{
    for (int i = 97; i < 123; i = i + 1)
    {
        cout << static_cast<char>(i) << '\t' << i << '\n';
    }
}

(尽管应注意,这是假设字符集编码是ASCII(的超集),但我认为实际上这几乎总是正确的)