2012-02-26 5 views
1

ここで実際に何を求めているのか理解するのに助けが必要です。 私は既にプログラムの一部を書いています。 改行文字とタブ文字の10進値を出力する必要がありますか? なぜ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/バイナリファイルを処理します。 –

+0

あなたの質問は何ですか?見逃しているのは、印刷可能なものと印刷できないものの区別です。 –

+0

プログラムは実行されますが、正しく動作しているかどうかはわかりません。 – leocod

答えて

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は非印字文字です。それぞれの制御文字表記は、[b]列のthe ASCII Wikipedia pageにあります。

これらの文字の制御文字表記を印刷する場合は、9と10を除き、\t\n(バックスラッシュtとバックスラッシュn)をそれぞれ印刷します。

あなたのループについてのもう一つ

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

これらの2つの別々のステートメントでなければなりません。 printf("\\n");"\n"(バックスラッシュn)を実際に印刷しますが、printf("\n")は実際の改行を印刷するだけですので、バックスラッシュを余分なバックスラッシュでエスケープするようにしてください。これはあなたのインストラクターがここで求めているものではありません各10のエントリ。

関連する問題