0

基本上我应该制作一个复制 Unix -wc 命令的程序。标志 -l、-w、-c 和 -L 应该分别显示行数、单词数、字符数和行内字符数。

我在阅读文本文件时遇到问题(第一次在 C 中进行)。我使用 GDB 并发现我的问题在于读取文件。一段时间后,无论出于何种原因,它都会读取空字符。

请假设我的代码一切正常,除了读取文件。

这是我的代码:

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

这正在成为最常见的问题之一,呵呵。

你错过了fgetc()return int,而不是char。这是因为EOF不是有效字符,所以需要更大的类型。例如,请参阅本文档

您还在第一次分配它c 之前进行了测试,这基本上使您的代码依赖于未初始化变量中发生的任何事情。这是个问题。

此外,您可能应该在计数EOF 之前进行测试。

此外,在代码中使用幻数被认为是一个坏主意。

这:

if(c == 32)

可以写成:

if(c == ' ')

还有这个:

if(c == 10)

可:

if(c == '\n')

在我看来,这两个都更清楚。

于 2013-02-05T14:02:42.840 回答