2017-07-28 6 views
-1

ファイルに空白行があります。新しい行を保存する方法:#include "file"

"a" 
"" 
"b" 
"" 
"c" 

ファイルは、次の方法を介してプログラムに含まれて

fputs (
#include "file" 
,stdout 
); 

実績:

abc 

期待される結果:によって分離

a 

b 

c 
+1

"" "' - > '" \ n \ n "' – BLUEPIXY

+2

できません。空の新しい行は文字列内に*ありません。文字列の外側にあります。 '' ''にあるものだけが文字列リテラルに連結されます。 –

+0

"result"とは、プログラムの実行時に出力を意味しますか?それから#includeとは関係ありません。 –

答えて

3

Cはマージ文字列リテラル白ペース。書くとき

"a" 
"" 
"b" 
"" 
"c" 

​​にコンパイラをマージします。コードがコンパイルされると、2つのソースの違いを検出することはできません。

あなたは改行をしたい場合は、明示的に文字列リテラルにそれらを挿入します。

"a\n" 
"\n" 
"b\n" 
"\n" 
"c" 
2
fputs (
#include "file" 
,stdout 
); 

は法律上、貧しい味であり、ほとんどのコーディング規則に対して。

何が起こるかは、dashblinkenight's answerによってよく説明されていますが、私は繰り返さないことにします。

しかし、私は別のアプローチを提案します。 (GNU makeを使用している場合など、あなたのMakefile)ビルドシステムがに変更し、より良い(ときれい)を生成前に、あなたの#include "file.inc"があなたを追加し、完全な文、

WRITELINE("a"); 
WRITELINE(""); 
WRITELINE("b"); 
WRITELINE(""); 

のおそらく連続を含むことになりfile.inc Cファイル:

#define WRITELINE(Lin) do { fputs(Lin,fil); fputc('\n', fil); } while(0) 

(このquestionは私がdo{ ... }while(0)を使用したい理由を説明する良い答えを持っている....)

あなたは簡単なfil.inc(おそらくsedまたは何か他のものを呼び出すいくつかmakeルールで、あなたのfilから)を生成することができます。

PS。実際には、Cコードを生成することは良い考えです。

-2

私は上記の回答に同意しますが、"\r"を追加することもできます。それを必要とするシステムもあります。この文字はキャリッジリターン(13)になります。したがって、文字の間に"\n\r"を置きます。

+1

です。これらのシステムでは、*バイナリ*モードではなく*テキスト*モードで 'fopen 'することができます。 –

+2

改行が必要な場合は、 '\ r'を追加しないでください!あなたが '' \ r \ n "'を使用する壊れたシステムを持っているなら、@BasileStarynkevitchが書いたようにファイル機能に任せてください。 – Olaf

+0

2つのコマンドはタイプライターに関連していますが、まだいくつかのアプリケーションを端末アプリケーションに持っています。 '' \ n "'は新しい行が必要であることを示します。したがって、端末は文字を前の文字の右の列と次の行に配置しなければなりません。 '' \ r "'は、現在の行頭で入力を再開する必要があることを示します。したがって、 '' \ n "'がなければ、文字は行頭で文字を上書きし始めます。文字列が連続して通信される場合、いくつかのアプリケーションで両方を組み込むことが重要です。 –

関連する問題