【问题标题】:Is there something wrong in my program that prints the characters for the ASCII CODE?打印 ASCII 代码字符的程序有问题吗?
【发布时间】:2021-04-11 15:45:50
【问题描述】:

我打印 ASCII 码字符的程序有问题吗? 我的程序不打印从 0 到 32 的字符。否则,它可以工作。

代码:

#include <stdio.h>

int main(){
    int i;
    
    for(i=0; i<=127; i++){
        if(i%10 == 0){
            printf("--------------------\n");
            printf(" Dec  Char \n");
            printf("--------------------\n");
            
        }
        printf(" %d %5c \n", i, i);
    }
    return 0;
    
}

谢谢!

【问题讨论】:

  • 从 0 到 32 的“字符”是不可打印的,它们是控制码。见en.wikipedia.org/wiki/ASCII#Control_code_chart
  • "打印 ASCII 代码字符的程序有问题吗?" --> 不。“我的程序不打印 0 到 32 之间的字符。”是错误的结论。尝试将结果“管道”到文件prog &gt; ouput.txt,然后查看文件的长度。是否符合预期?
  • 请分享更多细节 - 你期待什么?

标签: c ascii


【解决方案1】:

我的程序不打印从 0 到 32 的字符。

您的程序会打印从 0 到 127 的所有字符,包括 0 到 127。假设您的 C 实现使用 ASCII,这很可能,从 0 到 32 和字符 127 的大多数字符都没有完全可见的效果。

从0到31的字符是各种控制码。字符 7 是一个“警觉”字符。在“打印”时,您可能会听到叮叮声、哔哔声或其他声音。

第 9 个字符是一个水平制表符。如果您在它之前和之后打印另一个可见字符,您会看到它们之间有一些空间。空格将使得它后面的字符打印在文本“tab column”中,通常是第 8、16、24、32 列,以此类推,默认设置(将第一列计为第 0 列)。

字符 10 是换行符或换行符,它在旧电传打字机中将纸张向上移动。由于这个字符,您可能会在“10”之后和“11”之前看到一个空白行。 13是回车。 (最初它移动了托架,即保持纸张的机构,将左侧与打印机构对齐。后来,它将打印机构移回了纸张的左侧。) 12 是垂直标签。 8 是退格键。在现代终端窗口软件中,打印“a”、退格和“b”可能会在“a”上退格并将其替换为“b”。在旧的电传打字机中,它会物理地将“b”打印在“a”上。

32 是一个空格。它已正常打印,但您的输出并未提供清晰的方式使其可见。 (可以通过从终端窗口复制文本,将其粘贴到文本编辑器中并详细检查特定字符来看到它。这可能会显示该行中有一个空格字符,而该空格字符在其上方的行中不存在。 ) 如果您打印“a”、空格(字符 32)和“b”,您将看到空格。

字符 127 是一个删除字符。

许多其他代码对于向人类输出文本来说是过时的。但是,它们中的一些用于输入,例如发出信号请求以暂停或恢复程序输出、中断或暂停程序、撤消最近键入的字符等等。此外,转义字符 27 用于启动“转义序列”,某些终端软件将其解释为各种请求,例如更改文本颜色、在窗口标题栏中放置新文本、更改或报告光标位置。

【讨论】:

    【解决方案2】:

    您可以在 32 这 32 之后打印 ascii 以进行控制,例如开始文本、结束文本等。

    【讨论】:

    • 非常感谢!
    猜你喜欢
    • 2022-12-20
    • 2016-06-21
    • 2021-11-19
    • 2022-09-30
    • 1970-01-01
    • 2016-12-25
    • 2021-04-02
    • 1970-01-01
    • 2020-01-16
    相关资源
    最近更新 更多