【问题标题】:How do I align columns in C如何对齐C中的列
【发布时间】:2019-11-23 20:38:13
【问题描述】:

我需要编写一个程序,在 5 列中显示八进制、十六进制和符号的十进制值。 (值 0-32 需要指定特殊代码)。该程序有效,但输出需要很好地对齐。我应该怎么做才能对齐列并使其看起来整洁? 这是程序:

#include <stdio.h>

main()
{
    int n,i,u=1,a=0,b=255;

    printf("\272");
    i=printf("My program to draw the ASCII table:");
    printf("\272\n");
    printf("\310");
    for(n=0;n<i;n++)  printf("\315");
    printf("\274\n\n");

  for(;a<=b;a++)
  {
      switch(a)
             {
                case 0:
                    printf("%d %o %x NUL  \272  ",a,a,a);
                    break;
                case 1:
                    printf("%d %o %x SOH  \272  ",a,a,a);
                    break;
                case 2:
                    printf("%d %o %x STX  \272  ",a,a,a);
                    break;
                case 3:
                    printf("%d %o %x ETX  \272  ",a,a,a);
                    break;
                case 4:
                    printf("%d %o %x EOT  \272  ",a,a,a);
                    break;
                case 5:
                    printf("%d %o %x ENQ  \272  ",a,a,a);
                    break;
                case 6:
                    printf("%d %o %x ACK  \272  ",a,a,a);
                    break;
                case 7:
                    printf("%d %o %x BEL  \272  ",a,a,a);
                    break;
                case 8:
                    printf("%d %o %x BS  \272  ",a,a,a);
                    break;
                case 9:
                    printf("%d %o %x TAB  \272  ",a,a,a);
                    break;
                case 10:
                    printf("%d %o %x LF  \272  ",a,a,a);
                    break;
                case 11:
                    printf("%d %o %x VT  \272  ",a,a,a);
                    break;
                case 12:
                    printf("%d %o %x FF  \272  ",a,a,a);
                    break;
                case 13:
                    printf("%d %o %x CR  \272  ",a,a,a);
                    break;
                case 14:
                    printf("%d %o %x SO  \272  ",a,a,a);
                    break;
                case 15:
                    printf("%d %o %x SI  \272  ",a,a,a);
                    break;
                case 16:
                    printf("%d %o %x DLE  \272  ",a,a,a);
                    break;
                case 17:
                    printf("%d %o %x DC1  \272  ",a,a,a);
                    break;
                case 18:
                    printf("%d %o %x DC2  \272  ",a,a,a);
                    break;
                case 19:
                    printf("%d %o %x DC3  \272  ",a,a,a);
                    break;
                case 20:
                    printf("%d %o %x DC4  \272  ",a,a,a);
                    break;
                case 21:
                    printf("%d %o %x NAK  \272  ",a,a,a);
                    break;
                case 22:
                    printf("%d %o %x SYN  \272  ",a,a,a);
                    break;
                case 23:
                    printf("%d %o %x ETB  \272  ",a,a,a);
                    break;
                case 24:
                    printf("%d %o %x CAN  \272  ",a,a,a);
                    break;
                case 25:
                    printf("%d %o %x EM  \272  ",a,a,a);
                    break;
                case 26:
                    printf("%d %o %x SUB  \272  ",a,a,a);
                    break;
                case 27:
                    printf("%d %o %x ESC  \272  ",a,a,a);
                    break;
                case 28:
                    printf("%d %o %x FS  \272  ",a,a,a);
                    break;
                case 29:
                    printf("%d %o %x GS  \272  ",a,a,a);
                    break;
                case 30:
                    printf("%d %o %x RS  \272  ",a,a,a);
                    break;
                case 31:
                    printf("%d %o %x US  \272  ",a,a,a);
                    break;
                case 32:
                    printf("%d %o %x SPACE  \272  ",a,a,a);
                    break;
                case 127:
                    printf("%d %o %x DEL  \272  ",a,a,a);
                    break;
                default:
                    printf("%d %o %x %c  \272  ",a,a,a,a);
                    break;
             }

    if((a+1)%5==0) printf("\n");
  }
}

这是输出: enter image description here

【问题讨论】:

  • printf 采用宽度说明符,例如 %10d 表示十个字符和一个十进制值。
  • 这也不是 ASCII 而是 DOS ANSI。

标签: c


【解决方案1】:

请参阅此答案,了解如何将空格左填充到固定列宽: Left-pad printf with spaces

【讨论】:

  • 我尝试添加代码 printf("%20s","%d %o %x %c \272 ",a,a,a,a); ,并且格式有效,但现在它显示“%d $o %x %c”而不是值
  • @HoloBump 请启用编译器警告。您为第一个格式说明符参数"%20s" 提供了五个参数,而其他四个被忽略了。
  • @HoloBump format 字符串始终是printf 的第一个参数。
  • @WeatherVane 那么我该如何解决这个问题呢?请问那一行写对了吗?
  • printf("%9d %9o %9x %9c \272 ",a,a,a,a); 但如果内容太大而无法容纳,则忽略任何字段宽度。换句话说,它破坏了格式,而不是通过截断打印不正确的数据。
猜你喜欢
  • 1970-01-01
  • 2016-04-24
  • 2011-05-02
  • 1970-01-01
  • 2015-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多