【问题标题】:Printing ASCII in table format以表格格式打印 ASCII
【发布时间】:2015-10-01 23:05:53
【问题描述】:

寻找任何可以帮助我处理代码格式的提示。我需要在 C 中打印 ASCII 表,但由于 C 的程序性质,我无法获得正确的表格式。

基本上这是我的代码:

#include <stdio.h> 

char header[] = "Dec Hex Oct Char |";
char header2[] = "-----------------|";

int main(){

    char i;

    printf("%s %s %s %s\n",header,header,header,header);
    printf("%s %s %s %s\n",header2,header2,header2,header2);

    for(i = 0;i<=31;i++){
        printf("%03d %02X %03o       |",i,i,i);
    }

    return 0;
}

我的输出看起来像这样:

Dec 十六进制 Oct 字符 | Dec Hex Oct 字符 | Dec 十六进制 Oct 字符 |

000 00 000

001 00 001

...

031 1F 037

现在我需要其余的列来生成相同的东西,除了 ASCII 数字 32-127

我明白为什么它没有按照我想要的方式生成..但是当我尝试在第一个循环中嵌套另一个 for 循环(打印 ASCII 数字 32-63)时,它编译得不是很好。

本质上我是在问是否有一种方法可以并行运行 for 循环或在 for() 中使用另一个函数,以便它可以在开始下一行之前在同一行上打印表的其余部分。

【问题讨论】:

  • 一种方法是在当前行下方再添加两行printfprintf("%03d %02X %03o |",i+32,i+32,i+32);printf("%03d %02X %03o |",i+64,i+64,i+64);。当然还有其他方法可以做到这一点。实际上,您甚至可以将其全部放入printf 中。我会把它作为练习留给你。
  • 哈哈! “由于 C 的程序性质,我无法获得正确的表格格式”C 是图灵完备的!
  • “它编译得不太好”。如果您需要帮助,请显示该部分代码和确切的编译器错误(不要只是在第一个障碍时放弃!)。
  • 不要因为你缺乏编程知识而责备C。
  • @user3629249:最近扩展了 ASCII 吗?上次我检查它是一个 7 位代码...

标签: c loops ascii tabular


【解决方案1】:

打印 ASCII 时,要显示不可打印的 char,请使用转义序列。

char *CodeToString(char *dest, char ch) {
   if (isprintf((unsigned char) ch) {
     dest[0] = ch;
     dest[1] = 0;
   } else {
     sprintf(dest, "\\x%02X",  (unsigned char) ch);
   }  
   return dest;
}

要打印多列,请使用内部循环。 @Alan Au

ASCII 运行 0 到 127 @Olaf

for(i = 0; i < 32; i++){
  for (j=0; j < 128; j += 32) {  
    char dest[5];
    printf("%3d %02X %03o %4s |",i+j,i+j,i+j,CodeToString(dest, i+j));
  }
  putc('\n', stdout):
}  

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多