C : files manipulation Can't figure out how to simplify this code with files manipulation

标签 c scanf fseek

我一直在研究这段代码,但我找不到问题所在。 该程序确实可以编译并运行,但最终出现 fatal error 。

程序读取文件并收集数字以计算总数(将它们转换为 float 后)。然后它读取文件并显示小于 10.00 的文件

我有一个名为 myFile.txt 的文件,其中包含以下内容:

詹姆斯------ 07.50 安东尼--- 17.00

所以显示应该是

  1. 总计 24.50
  2. 这是小于 10.00 的:
  3. 詹姆斯的得分为 07.50

这是代码:

int main()
{
   int n =2, valueTest=0,count=0;
   FILE* file = NULL;
   float temp= 00.00f, average= 00.00f, flTen = 10.00f;
   float *totalNote = (float*)malloc(n*sizeof(float));

   int position = 0;
   char selectionNote[5+1], nameBuffer[10+1], noteBuffer[5+1];

   file = fopen("c:\\myFile.txt","r");
   fseek(file,10,SEEK_SET);
   while(valueTest<2)
   {
       fscanf(file,"%5s",&selectionNote);
       temp = atof(selectionNote);
       totalNote[position]= temp;
       position++;

       valeurTest++;
   }

   for(int counter=0;counter<2;counter++)
  {
          average += totalNote[counter];
  }
  printf("The total is : %f \n",average);

  rewind(file);
  printf("here is the one with less than 10.00 :\n");

  while(count<2)
  {
        fscanf(file,"%10s",&nameBuffer);

        fseek(file,10,SEEK_SET);
        fscanf(file,"%5s",&noteBuffer);
        temp = atof(noteBuffer);

        if(temp<flTen)
        { 
           printf("%s who has %f\n",nameBuffer,temp);
        }
        fseek(file,1,SEEK_SET);
        count++;
   }
   fclose(file);

}

我对 c 很陌生,发现它比 c# 或 java 更难。我想得到一些建议来帮助我变得更好。我认为这段代码可以更简单。你也这么认为吗?

最佳答案

您没有提及您正在使用的平台和编译器。鉴于您的文件名使用 Windows 样式的路径,我将猜测 MSVC 和 Windows。

您说代码可以编译并运行,但是您是否打开了编译器的警告?这可能会为您提供更多关于您可能正在做的错误事情的线索。

修复了一些拼写错误并添加了标准包含 header 后,我在 gcc 中编译了您的代码,该代码警告了 fscanf 格式字符串和参数之间的不匹配。特别是,您传递的是指向 char 数组的指针,这不是您的意思。您可能想阅读有关 C 语言中的数组和指针的内容,例如在 C FAQ 。该文档中的其余条目也非常有启发性。

关于C : files manipulation Can't figure out how to simplify this code with files manipulation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4557504/

相关文章:

c - 这个指针越界了吗?

c - 有没有一种特殊的方法可以从 c 中的文件中删除记录而不创建它的副本?

c - C语言从文件中读取值

c - 如何知道用户是否在输入窗口中输入了多个字符

c - 使用 scanf 将字符串存储到字符串数组中

c - 为什么我的 fputc/fwrite 一直以十六进制打印以及如何打印到文件的中间?

c - 在 C 中的链表的末尾添加一个新节点

c - 使用 Windows slim 读/写锁

C排序解释和麻烦

c - 最好使用scanf或fgets?