1

我正在读一本书,但我想不通,试试看:(它是非英语的,所以我翻译了它)

编写一个程序,要求有 n 个学生,选择 n 个学生(以动态方式),名字是 10 个字符,并记下 5 个字符

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

然后读取文件并从中(仅)计算总数。然后显示注释不大于 10 的人的姓名和注释。

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

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

Tips : 要将note从文本格式转换为float格式,可以使用atof函数

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

我的文本文件有这个形状:Bart------ 04.50 Lisa------ 18.00 Homer----- 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];
}

它可以编译但不起作用,我不知道为什么:(我觉得 C 语言与 java 或 c# 相比实在是太让人头疼了

你能给我一些灯吗?

4

3 回答 3

3

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

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

于 2010-12-28T10:13:05.767 回答
1

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

于 2010-12-28T10:09:06.913 回答
1

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

于 2010-12-28T11:38:54.727 回答