当前位置:  开发笔记 > 编程语言 > 正文

cprinting使用整数赋值给字符的Ascii

如何解决《cprinting使用整数赋值给字符的Ascii》经验,为你挑选了1个好方法。

我试图打印Ascii字符,我发现使用char c = NUM; printf("%c", c);将适用于某些数字(尝试使用Ascii数字的某些字母表)但有些会导致运行时错误,为什么会这样?

#include 

int main(void) {
    for(int i = 0; i < 128; i++){
        printf("%c", i); // WORKS FINE
    }

    for(char c = '!'; c < '~'; c++){
        printf("%c", c); //WORKS FINE
    }

    #if 0
    for(char d = 0; d < 128; d++){
        printf("%c", d); //IF REMOVED #if 0 --> RUNTIME ERROR
    }
    #endif

    // HOWEVER
    char e = 105;
    printf("%c", e); //OK
    return 0;
}

那么,为什么最后一部分工作而第三部分for循环不是?

编辑

在看到下面的答案之后,我明白我的循环已经病态了,我应该在127而不是128停止它.但是,当我尝试这个改变时 - 它根本没有输出:

for(unsigned char c = 0; c < 255; c++){
    printf("%c", c);
}

for(char c = -128; c < 127; c++){
    printf("%c", c);
}

marcolz.. 5

使用警告进行编译将始终有所帮助:

char.c:9:2: warning: comparison is always true due to limited range of data type [-Wtype-limits]
  for(char d = 0; d < 128; d++){
  ^

有符号字符可以容纳的最大值是127.因此,循环将永远不会结束,并将永远在-128和127之间循环.

编辑:

但正如@SilasAbrusco所提到的:一旦d增加到127之后,行为实际上是未定义的,请参阅:C++中有符号整数溢出是否仍未定义?



1> marcolz..:

使用警告进行编译将始终有所帮助:

char.c:9:2: warning: comparison is always true due to limited range of data type [-Wtype-limits]
  for(char d = 0; d < 128; d++){
  ^

有符号字符可以容纳的最大值是127.因此,循环将永远不会结束,并将永远在-128和127之间循环.

编辑:

但正如@SilasAbrusco所提到的:一旦d增加到127之后,行为实际上是未定义的,请参阅:C++中有符号整数溢出是否仍未定义?

推荐阅读
N个小灰流_701
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有