0

基本的に、Unix の -wc コマンドをコピーするプログラムを作成することになっています。フラグ -l、-w、-c、および -L は、それぞれ、行数、単語数、文字数、および行内の文字数を表示することになっています。

テキスト ファイルの読み取りに問題があります (C で初めて)。私は GDB を使用しましたが、ファイルの読み取りに問題があることを発見しました。しばらくすると、何らかの理由で null 文字が読み込まれます。

ファイルの読み取りを除いて、私のコードはすべて正しいと想定してください。

これが私のコードです:

void readInFile(char** argv, int arg, int addFlags, int argc)
{
   FILE *myFile;
   char c;
   int wordCount = 0, lineCount = 1, longestLine, characterAmount = 0;
   int charactersInLine = 0;

   myFile = fopen(argv[arg], "r");
   if(!myFile)
   {
      printf("%s not found!", argv[arg]);
      exit(EXIT_FAILURE);
   }

   while(c != EOF)
   {
      c = fgetc(myFile);
      putchar(c);
      characterAmount++;
      charactersInLine++;

      if(c == ' ')
         wordCount++;
      if(c == '\n')
      {
      if(charactersInLine > longestLine)
         longestLine = charactersInLine;
      charactersInLine = 0;
      lineCount++;
      wordCount++;
   }
}

ありがとう!

4

1 に答える 1

3

これは、最も一般的な問題の 1 つになりつつあります。

ではなくをfgetc()返します。これは、有効な文字ではないため、より大きな型が必要になるためです。たとえば、このドキュメントを参照してください。intcharEOF

c また、初めて割り当てる前にテストしています。これにより、基本的に、コードは初期化されていない変数にあるものに依存します。これは問題です。

また、おそらくカウントするEOF 前にテストする必要があります。

さらに、コードでマジック ナンバーを使用することは悪い考えであると考えられています。

これ:

if(c == 32)

書くことができます:

if(c == ' ')

この:

if(c == 10)

次のことができます。

if(c == '\n')

私の意見では、どちらもより明確です。

于 2013-02-05T14:02:42.840 に答える