停止fscanf?
我正在为学校写一个成绩册计划,我对一件事感到困惑。我们有一个文件要读取,它有多个学生ID和多个分数。如果这样做:停止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,
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)输入错误时,条件应为。