Ваш тип char
почти наверняка является подписанным (C / C ++ позволяет char
быть подписанным или без знака (a) ), поэтому, когда вы добавляете один к 127
, он переноситсяпримерно до -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;
}
Результаты:
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
! " # $ % & ' ( ) * + , - . /
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 { | } ~ .
(a) С C++ 17, basic.fundamental
:
простой объект char
может принимать либо те же значения, что и signed char
, либо unsigned char
;какой из них определяется реализацией.