0

私のプログラムが間違った結果を得る理由を知りたいです。空白、(.)、(,) などを含むファイルから文字を読み取り、特定の文字列形式で出力するだけです。その結果、300 以上の char 読み取りインスタンスとその奇妙な表現が得られます。実際の文字とそのメモリ ロケーションを出力する必要があります。感謝します!

 34 instances of character :
 35 instances of character ¼
 36 instances of character ¼
 37 instances of character ¼

  #include <stdio.h>

  int main()
  {
   char ch;
   int characters[100];
   int i,j,k;
   int charCount = 0;

   FILE *fPtr;
   fPtr=fopen("input.txt", "r");

   while(ch = fgetc(fPtr) != EOF)
   {
     i=0;
     characters[i] = (char)ch;
     i++;
   }

   int arrayLength = sizeof(characters)/sizeof(characters[0]);

   for(j= 0; j < arrayLength; j++)
   {
     for(k=1; k < arrayLength; k++)
     {
       if(characters[j] == characters[k])
   {
      charCount++;
          printf("%d instances of character %c in location %c \n", charCount, characters[j], &characters[j]);
   }
     }
   }
 }
4

1 に答える 1

1

これを覚えておいてください: fgetch()return int. 違いcharます。マニュアルページを参照してください。

これは、EOF定数が文字よりも大きいため、「任意の文字またはEOF」を表現できるようにするには、戻り値により多くのビットが必要になるためです。

つまり、EOF文字ではなく、帯域外通信の例です。

また、括弧が奇妙に見えます。おそらく次のことを意味します。

while((ch = fgetc(fPtr)) != EOF && ch != '\n')

割り当てを囲む内側の括弧のみに注意してください。

于 2012-07-05T14:15:53.613 に答える