当我尝试打印所有128个ASCII值,但我不明白为什么时,似乎出现了无限循环。这个问题要求我编写一个程序,该程序使用循环显示ASCII代码0到127的字符,并在每行上显示16个字符。我尝试使用for循环,并告诉程序如果我的char变量超过127,则停止循环,但由于某种原因,我最终遇到了无限循环。我什至写了一个if语句,告诉它如果char变量超过127则循环中断,但这似乎也不起作用。这是我的代码,任何反馈将不胜感激,谢谢。
#include <iostream>
using namespace std;
int main() {
char a;
for (char a = 0; a <= 127; a++)
{
cout << a << " ";
if (a % 16 == 0)
cout << endl;
if (a > 127)
break;
}
return 0;
}
总是小于或等于-128
。
127
如果是这种情况,只需使用#include <iostream>
using namespace std;
int main() {
char x = 127;
x++;
cout << (int)x << endl;
return 0;
}
而不是unsigned char
。
这里有一些代码可以完成这项工作,同时也只打印出专门标记为可打印的字符:
char
结果是:
#include <iostream>
using namespace std;
int main() {
unsigned char a = 0;
while (a < 128) {
if (isprint(a)) {
cout << a << " ";
} else {
cout << ". ";
}
if (++a % 16 == 0) {
cout << endl;
}
}
return 0;
}
来自((a)
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
! " # $ % & ' ( ) * + , - . /
0 1 2 3 4 5 6 7 8 9 : ; < = > ?
@ A B C D E F G H I J K L M N O
P Q R S T U V W X Y Z [ \ ] ^ _
` a b c d e f g h i j k l m n o
p q r s t u v w x y z { | } ~ .
:
普通的C++ 17, basic.fundamental
对象可以采用与char
或signed char
相同的值;哪一个是实现定义的。
这意味着当a == 127时,a ++给您128-> a = 0,因此条件仍然为真