Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
停止fscanf?_C_Fopen_Scanf - Fatal编程技术网

停止fscanf?

停止fscanf?,c,fopen,scanf,C,Fopen,Scanf,我正在为学校写一个成绩册计划,我对一件事感到困惑。我们有一个文件要读取,它有多个学生ID和多个分数。如果这样做: results = fscanf(gradebook, "%d %d %d %d", id, sco1, sco2, sco3); 在读取时将数字存储到这些变量中,然后在变量用完时停止光标以将信息存储在?…那么我是否应该直接跳入计算函数以计算最终分数,然后让它为下一个学生循环fscanf results = fscanf(gradebook, "%d %d %d %d", id,

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

允许吗?感谢您的帮助。

回答您的第一个和第二个问题:
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*
类型的参数。满足所有这些要求后,第三个问题的答案是:是的,您可以使用
sco1
sco2
sco3
作为参数调用
getCalc

正如您可能猜到的,这里不需要中间指针变量,这可以简化。但是,这种简化需要修改
fscanf
表达式(插入
&addressof
运算符):


你在读哪本书?

下面是一个工作示例,给出了每个学生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;
}
#包括
内部主(空)
{
int-id,sco1,sco2,sco3;
而(fscanf(stdin,“%d%d%d%d”,&id,&sco1,&sco2,&sco3)==4)
{
printf(“%d:%g\n”,id,(sco1+sco2+(双)sco3)/3.0);
}
返回0;
}
如果这样做:

results = fscanf(gradebook, "%d %d %d %d", id, sco1, sco2, sco3);
结果=fscanf(成绩册,“%d%d%d%d”,id,sco1, sco2、sco3)

在读取时将数字存储到这些变量中 当光标没有变量来存储信息时,停止光标 在哪

否,除非它在while循环中,否则它会在读取四个条目一次后完全停止,除非您使用
results
中的值来控制while循环并多次调用fscanf(),以便在每次调用时扫描四个条目

例如:-

//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);   
}

哪些类型是
id
sco1
sco2
sco3
?指针?它们是否已初始化?当(fscanf(…)==4)输入错误时,条件应为