尝试打印所有ASCII值时出现无限循环

问题描述 投票:1回答:3

当我尝试打印所有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;
}
loops ascii infinite
3个回答
1
投票
因此它

总是小于或等于-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对象可以采用与charsigned char相同的值;哪一个是实现定义的。

0
投票
字符是一个符号,因此,a + 128 = a

这意味着当a == 127时,a ++给您128-> a = 0,因此条件仍然为真

您可以使用=修复它如果(a> = 127)中断;
或在(a!= 127)时使用do {}

-1
投票
或在(a!= 127)时使用do {}
© www.soinside.com 2019 - 2024. All rights reserved.