0

私は C から始めており、特定の条件を理解したいと思っています。

メモ帳で生成されたテキスト ファイル、または Windows OS のエコーによってシェル経由で直接生成されたテキスト ファイルがあります。

これを実行すると、出力に余分な文字が表示されます。私が間違っていることは何ですか?文字ごとに安全な方法でテキストファイルを読み取るにはどうすればよいですか?

minggw でコードブロックを使用する。

ファイル.txt:

TEST

Cプログラム

void main()
{
   int i;
   FILE *fp;

   fp = fopen("file.txt","r");

   while ((i = fgetc(fp)) != EOF)
   {
      printf("%c",i);
   }
}

出力

 ■テスト

4

2 に答える 2

3

コードに問題がありますが、結果は問題ありません。

あなたのファイルはおそらくUTF-8で、最初に(紛らわしいほど)バイトオーダーマークが付いています。あなたのプログラムは (正しく) BOM のバイトを読み込んで出力していますが、それは適切なテキストの前に奇妙な文字として出力に現れます。

もちろん、UTF-8 はバイト オーダー マークを必要としないはずです (これは 8 ビット バイトです!)。Windows のメモ帳は、そのようなプログラムのリストの最初のプログラムです。

更新:もちろん、16ビット入力を示す文字間のスペースは考慮していません。それがあなたの問題です。あなたの C コードはワイド文字を読み取っていません。

于 2013-10-23T12:15:14.153 に答える
0

このコードを試してください

void main()
{
   int c,i;
   FILE *fp;

   fp = fopen("file.txt","r");

   while ((i = fgetc(fp)) != EOF)
   {
     printf("%c",i);
   }
}'
于 2013-10-23T12:23:18.040 に答える