如何读取文件,拾取数据并计算

时间:2010-12-28 10:01:43

标签: c fgets atof

我正在读一本书,我无法弄清楚这是否尝试:(它是非英语的,所以我翻译了它)

编写一个程序,要求多个学生n,选择n个学生(以动态方式),名称为10个字符,并注明5个字符

从上面的选择中创建一个文本文件note.txt,并附加连字符以达到10个字符(对于名称)。

然后从中读取文件(仅),计算总数。然后显示注释不大于10的那些名称和注释。

您必须实现3个函数:createStudent,createFile和readFile,而不使用全局变量。

语法:name必须声明为char nom [10 + 1](即James,然后将添加5个连字符以获得10个字符)=>詹姆斯-----并注意:char [5 + 1](即15.00或07.50)

提示:要将笔记从文本格式转换为float,您可以使用atof函数

我创建了createStudent和createFile函数。它们运行良好,但我无法弄清楚最后一部分(readFile函数)。

我的文字文件有这样的形状:巴特------ 04.50丽莎------ 18.00荷马----- 03.00

void readFile(int n){
FILE* file = NULL;
double temp= 0.0, average= 0.0;
double *total = (double*)malloc(n*sizeof(double));

int position = 0;
char information[5+1]="";

file = fopen("c:\\myFile.txt","r");
fseek(file,10,SEEK_SET);
while(fgetc(file) != EOF)
{
    fscanf(file,"%5s",&information);
    temp = atof(information);
    total[position]= temp;

    position++;

    fflush(stdin);
    fseek(file,11,SEEK_CUR);
}
fclose(file);
for(int compteur=0;compteur<2;compteur++)
{
    moyenne += totalNote[compteur];
}

它编译但不起作用,我无法弄清楚为什么:( 与java或c#

相比,我觉得C语言在这方面是如此痛苦 你可以给我一些灯吗?

3 个答案:

答案 0 :(得分:3)

您的输入文件看起来像包含“”形式的行。如果每行总是有固定数量的字符串/数字,您只需使用fscanf(例如fscanf(file, "%*s %f %*s %f %*s %f", &number1, &number2, &number3);)。

另一方面,如果每行可以有任意数量的字符串/数字对,则应该查看strtok函数。

答案 1 :(得分:1)

您希望使用strtok_r(或strtok,如果strtok_r不可用)。然后,您可以将字符串转换为带空格分隔符的标记数组。然后,循环数组以转换和求和量应该是微不足道的。

答案 2 :(得分:1)

使用fscanf或fgets,strtok,atol(或sscanf)的组合来读取数字。