>字符'b'
为char('a'+1),'c' is char('a'+2)
等。使用循环写出一个带有相应整数值的字符表
由于这个错误,我无法完成这项练习
错误:左值作为递增操作数
for(char a='a'; a<24; ++a)
{
cout<<char('a'++);
}
答案 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
循环的每次迭代都会将z
从for
增加到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;
}