2016-05-28 9 views
-2

私はCプログラミングを習得しようとしています。余分なキャリッジリターンはどこから来ていますか?

私は、この小さなプログラム書かれています:

#include <stdio.h> 
#include <stdlib.h> 

int main(void) { 
    // variable declarations 
    long nc; 
    char ch; 

    // initialize variables 
    nc = 0; 

    while ((ch = getchar()) != EOF) { 
     printf("%d\t%c\n", ch, ch); 
     ++nc; 
    } 

    printf("Number of characters typed: %ld\n", nc); 

    return EXIT_SUCCESS; 
} 

をし、私はそうのような小さなテキストファイル作成:

./countchar < text.txt 

echo "abcdef" > text.txt 

を私はそうのように、このプログラムを実行すると次の出力が得られます。

97  a 
98  b 
99  c 
100  d 
101  e 
102  f 
10 

Number of characters typed: 7 

私の質問は、リダイレクトを使用してこのプログラムを実行したときに、このケースで10が表すもの(改行?)と7番目の文字として表示される理由です。

+0

テキストファイルをエディタで開きましたか? 'echo'のマンページを読んだことがありますか?理由を見つけようと努力しましたか? ASCII '10'は改行ではなく行送りです。 – Olaf

+0

Linuxの場合は、 'echo -n" abcdef "> text.txt'を試してみてください。 – indiv

+0

いいえエディターで開きませんでした。私は正確に、私が上にタイプしたものだけをしました。私はエコーのマンページを読まなかった。私は完全な完全な初心者で、本から作業している。しかし、私はそれを今読んで、チップオラフに感謝し、それを理解しました。 – phedor

答えて

2

echo "abcdef"を実行すると、末尾に改行が表示されます。それはちょうどechoがデフォルトでどのように機能するかです。したがって、テキストファイルには7文字(abcdef\n)が含まれています。

cプログラムは正常に動作し、番号10(ASCII値は\n)とリテラル改行を示します。

ほとんどのシステム(but not all)では、新しい行を避けるためにecho -n "abcdef"を実行できます。代わりに(さらに移植性の高い)、改行文字を気にする場合は、echoの代わりにprintfを使用してください。

+0

More than portably *、それ以上の信頼性はありません。 'echo -n'は、それをサポートするシステムでは完全に信頼できます。 – immibis

+0

@immibisフェアポイント。編集されました!ありがとう。 –

関連する問題