c++永char超过255字符,在for中出现永真循环怎么解决?

如下欲输出ASCII编码及对应的字符,但程序中出现了“永真循环”(俗称“死循环”)。请指出原因,并修改(请给出至少2种修改方案)。

// ASCII.cpp
#include
using namespace std;

int main() // 为什么出现永真循环? 如何修改?
{
unsigned char c;
for(c=0; c<256; c++)
cout << int(c) << '\t' << c << endl;
// 表达式int(c)为将c的值临时强制转换成指定的int类型
return 0;
}

unsigned char c;表示范围0~255,当c=255的时候+1溢出,得到0,而不是256,从而造成死循环
改法1

#include <iostream>
using namespace std;

int main() // 为什么出现永真循环? 如何修改?
{
unsigned char c;
for(c=0; c<255; c++)
cout << int(c) << '\t' << c << endl;
// 表达式int(c)为将c的值临时强制转换成指定的int类型
cout << int(c) << '\t' << c << endl;
return 0;
}

改法2

#include <iostream>
using namespace std;

int main() // 为什么出现永真循环? 如何修改?
{
unsigned char c;
for(c=0; c<128; c++)
{
cout << int(c*2) << '\t' << c*2 << endl;
cout << int(c*2+1) << '\t' << c*2+1 << endl;
// 表达式int(c)为将c的值临时强制转换成指定的int类型
}
return 0;
}

问题解决的话,请点下采纳

对unsigned char类型赋值,超过它表示范围的值时,结果是初始值对无符号类型表示数值总数取模后的余数。例如,8bit大小的unsigned char可以表示0至255区间内的值,如果赋值了一个区间以外的值,则实际结果是该值对256取模后所得的余数(只会取第一次结果的余数)。修改后的代码如下图所示:

img