问题提出:重写前面的字符值示例尝试使用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 变量计数器对齐。我做错了什么事?
答案 0 :(得分:3)
所以您现在缺少的只是大括号:
int main()
{
char letter = 'a';
for (int i = 97; i < 123; i = i + 1)
{
cout << letter << '\t' << i << '\n';
letter = letter + 1;
}
}
所有这些控制结构都需要一个语句块(例如if
,else
,for
,while
)。用大括号括起来的语句块。但是,所有这些控件也都接受单个语句而不是语句块。因此,如果for(...)
之后没有左括号,则仅将下一条语句视为循环迭代的一部分。但是在您的情况下,您希望在每次循环迭代中都执行以下两个语句,因此需要大括号。优良作法是始终使用大括号,即使循环主体中只有一个语句也是如此。
从您的早期版本开始,您似乎希望在i
循环中同时包含letter
和for
作为循环变量。这在某种程度上是可能的,但是各个语句必须位于;
之间的匹配部分中,例如:
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
循环的问题之外:我手头的练习没有参考,但是真的需要同时迭代i
和letter
吗?似乎您在letter
中持有i
的ASCII整数表示形式,因此您可以迭代i
或letter
,删除另一个,然后在您的输出:
int main()
{
for (int i = 97; i < 123; i = i + 1)
{
cout << static_cast<char>(i) << '\t' << i << '\n';
}
}
(尽管应注意,这是假设字符集编码是ASCII(的超集),但我认为实际上这几乎总是正确的)