2017-10-24 21 views
0

このファイルはdictionary1.txtという名前で、彼らのすぐ隣の発音。私がしたいことは、各行から最初の単語を取得し、プログラムが最初から作成する別のtxtファイルにそれらを印刷することです。私のコードはそれをしますが、それはまた、英語の単語の間にランダムな中国語の文字を印刷します、なぜ私は分かりません。.txtファイルから各行の最初の単語を取得し、その単語を別の.txtファイルに出力する:仕事の種類だけでなく、ランダムな文字を印刷する

ここでは出力に含まファイルは次のようになります。

(た発音がdictionary1.txtでblankspaceで各行の実際の言葉から区切られている)https://imgur.com/a/pZthP

マイコード:

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

int main(int argc, char *argv[]) { 
char line[100]; 
int i = 0; 
FILE* fp1 = fopen("dictionary1.txt", "r"); 
FILE* fp2 = fopen("dictionary2.txt", "w"); 

if (fp1 == NULL || fp2 == NULL){ 
    printf("ERROR"); 
    return -1; 
} 

while (fgets(line, 100, fp1) != NULL){ 
    while (line[i] != ' '){ 
     fputc(line[i], fp2); 
     i++; 
    } 
    i=0; 
    fputc('\0', fp2); 
} 

return 0; 
} 

私はfputc( '\ n'、fp2)も試してみましたが、私が最初から作成したファイルの次の行に何が得られなかったかにかかわらず。私はまたすべてのランダムな中国語の手紙を取り除くことができません。

編集:私はそれを理解しました。私が作業していた.txtファイルは、私のプログラムではうまくいかなかったUnicodeフォーマットで保存されました。私はそれをANSIに変え、今は魅力のように動作します。

+3

あなたのプログラムは、 'fputc( '\ 0'、fp2)を' fputc( '\ n'、fp2) 'に置き換えた後、私は改行を確認した。私が考えることができる唯一のことは、あなたの入力行に最初の100文字にスペースが含まれていないことです。したがって、バッファオーバーフローが発生し、ランダムなガベージが出力ファイルに表示されます。 – redxef

+0

鉱山はまだ動作しません。小さな.txtファイルでテストしたところ、うまくいきました。私は巨大な辞書でそれを実行すると、まだ単語間のランダムな文字を印刷します... –

答えて

0

\ nは、すべてのオペレーティングシステムとすべてのエディタで正しい行区切り記号ではありません。

メモ帳でtxtファイルを編集する場合は、fputs ("\r\n", fp2);を試してください。\ rは改行(カーソルが行の最初の文字に戻ります)と改行を意味します。

一般に、Windowsでは '\ r \ n'が行区切り文字として使用されますが、少なくともメモ帳では「\ n」文字が終了行以外の文字として表示されます。 LinuxとMac OSでは、異なる行区切り文字を使用します。また、あなたがC++を使用して気にしない場合、あなたはいくつかのコンパイラが自動的に「\ n」を変換することができることを出力ストリームosを作成しようとos << endl ノートを書くことができ、このうち \n and \r seem to work everywhere. Why is line.separator more portable?

fprintf(fp2, "\n"); チェックをしようとする場合があります対応するオペレーティングシステムの終了行の文字/キャラクタシーケンスに変換しますが、一部の文字は変換できません。

whileループの条件をline[i] != ' ' && line[i] != '\0'に変更し、ファイルfp2fcloseで閉じます。

+0

はまだ動作しません。小さな.txtファイルでテストしたところ、うまくいきました。私は巨大な辞書でそれを実行すると、まだ単語の間にランダムな文字を印刷します。それは、私は別の奇妙な問題に遭遇したと言われています。 ifコントロールに追加した2番目の条件を追加すると、その単語も失われました。ランダムな文字のみ。 編集: '\ 0'を '\ n'に修正し、実際の単語と同様にランダムな文字を印刷するように戻しました... –

+0

通常のテキストモードでファイルを開くと、Cライブラリは '\ n'から' \ r \ n'への変換を処理します。 – redxef

0

.txtファイルがUnicode形式で保存されました。私はそれをANSIに変換し、すべてが突然修正されました。

関連する問題