我正在为学校写一本成绩簿计划,我对一件事感到困惑。我们有一个要读取的文件,其中包含多个学生ID和多个分数。会这样做:
results = fscanf(gradebook, "%d %d %d %d", id, sco1, sco2, sco3);
在读取时将数字存储到那些变量中,然后在变量用完时将光标停止以存储信息?...然后我应该直接进入计算函数来计算最终成绩然后再循环fscanf为下一个学生?
results = fscanf(gradebook, "%d %d %d %d", id, sco1, sco2, sco3);
getCalc(sco1, sco2, sco3);
这是允许的吗?谢谢你的帮助。
答案 0 :(得分:1)
以下是一个工作示例,给出了每个学生ID的平均成绩:
#include <stdio.h>
int main(void)
{
int id, sco1, sco2, sco3;
while (fscanf(stdin, "%d%d%d%d", &id, &sco1, &sco2, &sco3) == 4)
{
printf("%d: %g\n", id, (sco1+sco2+(double)sco3)/3.0);
}
return 0;
}
答案 1 :(得分:1)
会这样做:
results = fscanf(gradebook,“%d%d%d%d”,id,sco1, sco2,sco3);
然后将数字存储到那些变量中 当光标用完变量以存储信息时停止光标 在?
不,除非它处于while循环中,否则在读取四个条目ONCE后它会完全停止,除非您使用results
中的值来控制while循环并多次调用fscanf()来扫描4每次通话都有条目。
实施例: -
//Keeps reading unless it encounters less than 4 parameters, which might be the case
//if an end of file is reached, or your data pattern changes.
while( fscanf(gradebook, "%d %d %d %d", id, sco1, sco2, sco3) == 4 )
{
//You can pass the data of individual id, to calculate function, and compute the required
//sum, total or other data locally in the function, there is really no reason to use pass
//address in your case, so just transfer data using pass by value method.
getCalc(id,sco1,sco2,sco3);
}
答案 2 :(得分:0)
回答您的第一个和第二个问题:id
,sco1
,sco2
和sco3
的类型应为int *
(即指针指向int
),这些变量应明确指向实际的int
对象,并且在使用它们之前应检查返回值(results
)。例如:
int a, b, c, d;
int *id = &a, *sco1 = &b, *sco2 = &c, *sco3 = &d;
int results = fscanf(gradebook, "%d %d %d %d", id, sco1, sco2, sco3);
if (results == 4) {
getCalc(sco1, sco2, sco3);
}
此外,getCalc应接受int *
类型的参数。满足所有这些要求后,第三个问题的答案是:是的,您可以getCalc
,sco1
和sco2
作为参数致电sco3
。
正如您可能已经猜到的那样,这里不需要中间指针变量,这可以简化。但是,这种简化需要修改fscanf
表达式(插入&addressof
运算符):
int id, sco1, sco2, sco3;
int results = fscanf(gradebook, "%d %d %d %d", &id, &sco1, &sco2, &sco3);
if (results == 4) {
getCalc(&sco1, &sco2, &sco3);
}
你在读哪本书?