C ++ for char类型的循环

时间:2014-06-01 15:15:53

标签: c++ loops

>字符'b'char('a'+1),'c' is char('a'+2)等。使用循环写出一个带有相应整数值的字符表 由于这个错误,我无法完成这项练习 错误:左值作为递增操作数

  for(char a='a'; a<24; ++a)
    {
    cout<<char('a'++);
    }

5 个答案:

答案 0 :(得分:3)

循环体永远不会使用控制表达式a < 24执行,因为您已初始化变量a,其字符为a,且所有可打印字符均不小于ASCII值32。
试试这个:

for(char a='a'; a < 'a' + 24; ++a)
{
    cout << a;
}

答案 1 :(得分:2)

如果您将变量letter命名为a而不是for(char letter='a'; letter<24; ++letter) { cout<<char('a'++); } ,我认为您不会感到困惑,因为它在开头只代表字母'a'。

char

我打算假设你真的要打印出整个字母,而不仅仅是前24个字母。

从这里看起来就像你试图混合两种可能的方法。在第一种方法中,每次a循环的每次迭代都会将zfor增加到0,并且每次都打印出来。在第二种方法中,您将某些偏移量从25增加到'a' + offset并打印出letter

在第一行中混合使用这两种方法。您正在启动循环,'a'设置为letter,您不知道其中的数值。然后,您比较24,看它是否小于'a'。在任何与ASCII兼容的字符集中,字符97的值为++,因此这个条件永远不会通过。

然后,您在cout行上滥用了++'a'运算符尝试修改其操作数,但'a' + 1是文字,因此无法修改。看看你的作业告诉你什么。例如,您可以'b'获取letter,因此这假定您有一个偏移量(您不使用当前方法)。

重复一遍,你有两个选择。首先:从char开始,将'a'保留为letter并修复条件,以便检查'z'是否小于或等于letter的值然后打印出letter。第二步:将offset更改为0并在26处启动,并在小于'a' + offset时将其递增,然后打印出{{1}}。

但请注意,这两种方法都假定字母在执行字符集中具有连续值。这不一定是真的。

答案 2 :(得分:1)

++运算符是一个“隐藏赋值”(操作数的值由它改变)。但是你只能分配变量,'a'不是。

答案 3 :(得分:1)

我知道这已经关闭了一段时间,但由于练习是关于while循环而不是循环,我想我会提供我的解决方案。我自己只是阅读这本书,未来的某个人可能会偶然发现这个。

int i = 0;
char n = 'a';   // this will list the alphabet
int conv = 0;   
conv = n;       // this converts the alphabet into integer

while (i < 26) {        // starts from 0 and goes to 25
    cout << char(n + i) << '\t' << conv + i << '\n';
    ++i;
}

答案 4 :(得分:0)

您可以使用以下内容:(http://ideone.com/akwGhl

#include <iostream>

int main()
{
    for (char c = 'a'; c <= 'z'; ++c) {
        std::cout << "letter " << c << " has value " << int(c) << std::endl;
    }
    return 0;
}