我试图编写一个输出ascii字符32到127的简单程序,当我执行它时,它会一遍又一遍地输出字符32到127 ......直到它崩溃。这是代码:
#include <iostream>
using namespace std;
int main()
{
char letter = 32;
for (letter = 32; letter <= 127; letter++)
{
cout << letter << " ";
}
cout << endl;
system("pause");
return 0;
}
这有点奇怪,因为如果我改变了#34;字母&#34;对于一个int变量,它工作正常。
答案 0 :(得分:2)
您的char
可能已签名,因此其值范围为-128 .. + 127。一旦达到127并且你递增它,它变为-128,仍然小于127,并且循环无限运行。请改用int
或unsigned char
。
答案 1 :(得分:1)
char
是一个只有1个字节的数据类型,通常是8位。由于您尚未指定char
的“签名”,因此您的编译器可能假设signed char
,其范围为-128到127.
该循环永远运行,因为从127增加有符号字符会导致-128由于溢出而导致-128仍然低于或等于127。 解决这个问题的最简单方法是使用更大的整数。
int letter = 32;
for (letter = 32; letter <= 127 ; letter++) {
cout << static_cast<char>(letter) << " ";
}
答案 2 :(得分:0)
char
的值可以是-128..127,因此它始终为<= 127
。