c - 添加分数的程序不会从 C 的每一行中获取?

标签 c string file text structure

是的,我创建了一个程序,该程序将从一些不同文件中的一行获取内容并对它们求和,并将总和打印到屏幕上,然后继续获取下一行,如下所示。

#include<stdio.h>
#include<conio.h>
void addscores(void);

FILE *faa;
FILE *fab;
FILE *fac;

int DataCount=0;
int total=0;

struct store3
{
    int def3;
}stock3[128];

int main()
{  
    addscores();      
}
void addscores(void)
{
    do
    {
    total=0;
    faa=fopen("Test 01 Scores.txt","r");
    fscanf(faa,"%d", &stock3[DataCount].def3);
    fclose(faa);

    total=total+stock3[DataCount].def3;

    fab=fopen("Test 02 Scores.txt","r");
    fscanf(fab,"%d", &stock3[DataCount].def3);
    fclose(fab);

    total=total+stock3[DataCount].def3;

    fac=fopen("Test 03 Scores.txt","r");
    fscanf(fac,"%d", &stock3[DataCount].def3);
    fclose(fac);
    total=total+stock3[DataCount].def3;
    printf("Total = %d\n",total);
    DataCount=DataCount+1;
    getch();
    }
    while(!feof(faa));

getch();
}

但是,出现了一个问题,程序在完成第一次循环后不会读取文件的第 2、3...n 行,因此程序只会打印与第一行相同的和。

忽略无限循环(稍后可以修复)我该如何解决这个问题?

旁注:请原谅我臭名昭著的 while(!EOF) 使用

文件内容:

1
2
3
4
5

预期输出

3
6
9
12
15

实际输出

3
3
3
3
3
3
3
3
3
3
3
3
...
...

谢谢,已修复:D

最佳答案

由于您在每次迭代中打开和关闭文件,因此您始终读取每个文件的第一行。这就是这两个问题的原因:您会陷入无限循环,因为您永远不会到达 EOF 并且您总是对第一行中的条目进行求和。您应该在循环进入之前打开所有文件,然后关闭它们。您还应该检查是否至少有一个文件已达到 EOF(不仅是第一个文件),以便在它们具有不同长度时捕获这种情况,并将检查移动到循环的开头(如果文件为空)。

关于c - 添加分数的程序不会从 C 的每一行中获取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22993901/

相关文章:

c - 如何从用户空间 panic 内核

javascript - 匹配字符串中的单词,无论中间是什么

ruby - 测试字符串是以另一个字符串开头还是以另一个字符串结尾

无法将完整字符串写入文件

python - 读取存储在文本文件中的列表

c - 在 simulink 中重用 C 代码

c - C 中的有理数

c - 在 C 中使用 lseek 系统调用读取文件中写入的结构

java - 这个新的 String[] 和 String.value() 代码是什么意思?

c - 关闭文件时出现 Segmentation Fault 错误