停止fscanf?

时间:2013-04-13 07:30:15

标签: c fopen scanf

我正在为学校写一本成绩簿计划,我对一件事感到困惑。我们有一个要读取的文件,其中包含多个学生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);

这是允许的吗?谢谢你的帮助。

3 个答案:

答案 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)

回答您的第一个和第二个问题:idsco1sco2sco3的类型应为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 *类型的参数。满足所有这些要求后,第三个问题的答案是:是的,您可以getCalcsco1sco2作为参数致电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);
}

你在读哪本书?