使用转义表示法打印控制字符

时间:2012-02-26 11:08:06

标签: c

我需要帮助了解他们在这里真正要求的是什么。 我已经写了部分程序。 我是否必须打印换行符和制表符的十进制值? 为什么我不能一直每行10对?有时候我会得到10对而不是另外一次。

作业是:

  

编写一个程序,将输入作为字符流读取,直到   遭遇EOF。让程序打印每个输入字符及其   ASCII十进制值。

     

请注意ASCII中空格字符前面的字符   序列是非打印字符。特别对待他们。如果   非打印字符是换行符或制表符,print \ n或\ t,   分别。否则,请使用控制字符表示法。例如,   ASCII 1是Ctrl + A,可以显示为^ A.请注意ASCII   A的值是Ctrl + A加64的值。类似的关系成立   对于其他非打印字符。每行打印10对,除外   每次遇到换行符时都会开始一条新线。

这就是我写的:

#include <stdio.h>

    int main(void)
    {
    int ch;
    int i=0;

    printf("Please enter some characters.\n\n");

    while((ch=getchar()) != EOF)
    {
    if((i%10) == 0)
        printf("\n");

    if (ch == '\n')
        printf( "\n\\n ");
    else if (ch == '\t')
        printf("\\t %d ", ch);
    else if (ch < ' ')
        printf("^%c %d  ", ch+64, ch);
    else
        printf("%c %d  ",ch, ch);

    i = i+1;
    }
    return 0;
    }

3 个答案:

答案 0 :(得分:3)

他们要求的声音非常清楚;这是一些伪代码:

if (ch == '\n') print "\n %d", ch;
else if (ch == '\t') print "\t %d", ch;
else if (ch < ' ') { print "^"; print "%c %d", ch+'A', ch; }
else print "%c %d",ch, ch;

这不包括使其看起来正确所需的格式;你的代码已经有了一些格式。

答案 1 :(得分:2)

ASCII 0-31是非打印字符。它们各自的控制字符符号可以在[b]栏中的the ASCII Wikipedia page找到。

您需要为这些字符打印控制字符表示法,但9和10除外,您将为其打印\t\n(反斜杠-t和反斜杠-n)分别。

关于你的循环的另一件事

if((i%10==0) || (ch == '\n'))
printf("\n");

这些应该是两个单独的陈述。确保事先用额外的反斜杠逃避你的反斜杠,因为printf("\\n");实际上会打印"\n"(反斜杠-n),而printf("\n")只会打印一个实际的换行符,我几乎可以肯定这不是你的导师在这里要求的,除了每十个参赛作品之后。

答案 2 :(得分:0)

查看有关ASCII的维基百科页面,caret notation(与控制符号类似)。我不想在这里发布解决方案。 :d