2012-02-26 46 views
1

我需要幫助瞭解他們在這裏真正問到的是什麼。 我已經寫了部分程序。 是否必須打印換行符和製表符的十進制值? 爲什麼我無法一直得到每行10對?有時候我會得到10雙,有時候不會。使用轉義符號打印控制字符

的任務是:

編寫一個程序,讀取輸入作爲字符流,直到遇到 EOF。讓程序打印每個輸入字符及其 ASCII十進制值。

請注意,ASCII 序列中空格字符之前的字符是非打印字符。特別對待他們。如果 非打印字符是換行符或製表符,請分別打印\ n或\ t, 。否則,使用控制符號表示法。例如, ASCII 1是Ctrl + A,可以顯示爲^ A。請注意,A的ASCII 值是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

http://www.asciitable.com/您將要處理二進制文件。 – 2012-02-26 11:15:32

+0

你的問題是什麼?它看起來像你缺少的是printables和non-printables之間的區別。 – 2012-02-26 11:15:45

+0

該程序運行,但我不知道它是否正常工作。 – leocod 2012-02-26 12:31:53

回答

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; 

這是專屬格式使它看起來正確的需要;你的代碼已經有一些格式。

0

查看關於ASCIIcaret notation(與控制符號相似)的Wikipedia頁面。我不想在這裏發佈解決方案。 :D

2

ASCII 0-31是非打印字符。他們各自的控制字符符號可在the ASCII Wikipedia page的[b]欄找到。

您需要打印這些字符的控制字符符號,但9和10例外,您將分別打印\t\n(反斜槓-t和反斜槓-n)。

另一件事有關循環

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

這些應該是兩個單獨的語句。請務必事先用一個額外的反斜槓來避開您的反斜槓,因爲printf("\\n");實際上會打印"\n"(反斜槓-n),而printf("\n")只會打印一個實際的換行符,我幾乎可以肯定這不是您的老師在這裏要求的內容,每十個條目。