为什么当我的 char 变量达到 [del] 字符 (127) 值时,我的程序会进入无限循环?
Why does my program enters into an infinite loop when my char variable reaches the [del] character (127) value?
这是我的代码:
#include <iostream>
int main()
{
char x = 32;
while (x <= 126) {
std::cout << x << "\n";
x += 1;
}
}
到这里为止,一切正常,但如果我将代码更改为:
#include <iostream>
int main()
{
char x = 32;
while (x <= 127 /* here the "bad" change */ ) {
std::cout << x << "\n";
x += 1;
}
}
尝试打印 [del] 字符,我的程序进入无限循环 并开始打印许多我不想要的其他字符。为什么?
适合 8 位有符号变量的每个值都小于或等于 127。因此,如果您的平台使用 8 位有符号变量来保存字符,您的循环将永远不会退出。
打开你的警告选项!! (-Wextra
用于 GCC)
test.cpp: In function 'int main()':
test.cpp:41:15: warning: comparison is always true due to limited range of data type [-Wtype-limits]
41 | while ( x <= 127 )
| ~~^~~~~~
我想警告消息是不言自明的。
当 x 达到 127 时,它会在下一轮翻转到 -128 [-128 到 127]
谢谢大家,我已经用无符号类型替换了 char 变量的类型,现在程序运行正常,这是我的新代码:
#include <iostream>
int main()
{
unsigned char x = 0;
while (x < 255) {
x += 1;
std::cout << short int(x) << ":\t" << x << "\n";
}
}
这是我的代码:
#include <iostream>
int main()
{
char x = 32;
while (x <= 126) {
std::cout << x << "\n";
x += 1;
}
}
到这里为止,一切正常,但如果我将代码更改为:
#include <iostream>
int main()
{
char x = 32;
while (x <= 127 /* here the "bad" change */ ) {
std::cout << x << "\n";
x += 1;
}
}
尝试打印 [del] 字符,我的程序进入无限循环 并开始打印许多我不想要的其他字符。为什么?
适合 8 位有符号变量的每个值都小于或等于 127。因此,如果您的平台使用 8 位有符号变量来保存字符,您的循环将永远不会退出。
打开你的警告选项!! (-Wextra
用于 GCC)
test.cpp: In function 'int main()':
test.cpp:41:15: warning: comparison is always true due to limited range of data type [-Wtype-limits]
41 | while ( x <= 127 )
| ~~^~~~~~
我想警告消息是不言自明的。
当 x 达到 127 时,它会在下一轮翻转到 -128 [-128 到 127]
谢谢大家,我已经用无符号类型替换了 char 变量的类型,现在程序运行正常,这是我的新代码:
#include <iostream>
int main()
{
unsigned char x = 0;
while (x < 255) {
x += 1;
std::cout << short int(x) << ":\t" << x << "\n";
}
}