2016-11-06 11 views
0

改行やタブなどのエスケープ文字を\ nや\ tのような表示可能なエスケープシーケンスに出力したいので、\ nを表示して、 n。しかし、それは動作しません。答えはnを2回印刷し、うまくいきます。そして私は理由を知らない。ここに私のコードです。cプログラミング言語のエクササイズ3-2配列のエスケープ文字を出力

case '\n' : 
    s[j] = '\\'; 
    s[j++] = 'n'; 
    break; 

そしてHERESに答え

case '\n': 
     s[j++] = '\\'; 
     s[j] = 'n'; 
     break; 

ありがとう!

+2

「++」に関するすべてです。 'j ++ 'は' 'jの現在の値を使い、それをインクリメントすることを意味します。' 'j [0] =' \\ '; j [0] =' n '; j = j + 's [j] = '\\'; s [++ j] = 'n''(' ++ j'はj *の値を増やしてから使用することを意味します) – Tibrogargan

+0

ああありがとう! – jessie

+0

質問は基本的なC構文の質問であり、おそらくSOに価値を加えるつもりはないでしょう(人々は言うかもしれませんが)。質問はその理由で閉鎖されなければなりません)回答を入れるだけで、反発するだけでなく、質問が価値のないものとして削除されるのを防ぐことができます。 – Tibrogargan

答えて

-1

あなたは増加/減分について、次のことを知っておく必要があります。

  1. (自分で)完全な文でそれらを使用する場合は、i++++iは同等です。

  2. 式でそれらを使用する場合、i++式にiの現在の値を使用し、++i最初iの値を増加させるのに対し、式が評価されたiが評価増加します表現。

    したがって

int s[2] = {6,7}; 
int i = 0; 
printf("%d", s[i++]); //prints 6 then sets i equal to 1 

これはそれをインクリメントする前に、あなたがs[j++]を使用するときは、上記の行と同じjを使用していることを意味し、あなたの場合は

int s[2] = {6,7}; 
int i = 0; 
printf("%d", s[++i]); //Sets i equal to 1 then prints 7 

のに対し(したがって、ちょうど設定したs[j]の値を上書きします)。

関連する問題