我需要帮助了解他们在这里真正要求的是什么。 我已经写了部分程序。 我是否必须打印换行符和制表符的十进制值? 为什么我不能一直每行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;
}
答案 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