我有一个C程序,我正在从一个文件读入,然后尝试打印它来测试它。我遇到的问题是我的MAX在MAX = 40并且打印的次数是多少。我已经尝试在函数中传递对jobcount的引用,但是当我在int和&之后添加*时出现错误。在传递它之前的jobcount之前。我很感激帮助,在所有问题上始终保持高质量的投入!
#include <stdio.h>
struct record{
char name[1];
int arrival_time;
int job_length;
int job_priority;
};
const int MAX = 40;
void fileinput(struct record jobs[MAX], int jobcount);
void output(struct record jobs[MAX], int jobcount);
int main(void)
{
struct record jobs[MAX];
int jobcount;
fileinput(jobs,jobcount);
output(jobs,jobcount);
return(0);
}
void fileinput(struct record jobs[MAX], int jobcount){
jobcount = 0;
FILE *f = fopen("data.dat","r");
while(fscanf(f, "%s %d %d %d", jobs[jobcount].name, &jobs[jobcount].arrival_time, &jobs[jobcount].job_length, &jobs[jobcount].job_priority) != EOF)
{
jobcount++;
printf("READ IN TEST \n");
}
}
void output(struct record jobs[MAX], int jobcount){
int j = 0;
for(j = 0;j < jobcount; j++)
{
printf("%s %d %d %d\n", jobs[j].name, jobs[j].arrival_time, jobs[j].job_length, jobs[j].job_priority);
printf("FOR LOOP TEST \n");
}
}
data.dat看起来像这样
A1 3 3 3
B1 4 4 4
C1 5 5 5
答案 0 :(得分:1)
你不应该得到错误。可能你可能单独改变了前向声明,忘了改变定义。
void fileinput(struct record jobs[MAX], int* jobcount);
fileinput(jobs,&jobcount);
定义 -
void fileinput(struct record jobs[MAX], int* jobcount) {
// ....
}
由于jobcount
是一个指针,因此您需要先取消引用以修改/访问它指向的值。您需要发布确切的错误消息以获得进一步的帮助。
答案 1 :(得分:1)
您可能最好修改fileinput()
以返回作业数:
int fileinput(struct record jobs[MAX])
{
int jobcount = 0;
...
return jobcount;
}
然后,在main()
:
int main(void)
{
struct record jobs[MAX];
int jobcount = fileinput(jobs);
...
return 0;
}
主要的替代方法是将指向jobcount
的指针传递给fileinput()
函数。如果你还返回一个状态(一切正常,数据中的条目太多,虚假数据等),这可能会更好。您的函数仍会返回一个值,但它将是错误指示,并且将通过指针返回作业计数。
第三种(可怕的,不推荐的)替代方法是为jobcount
使用全局变量(或文件静态变量)。
对于广义输入函数,您应该显式传递数组的大小,而不是假设它是MAX:
int fileinput(struct record jobs[], size_t maxjobs);
int jobcount = fileinput(jobs, MAX);
您可以编写代码以确保不超过指定的作业记录数。
答案 2 :(得分:1)
如果您愿意,可以通过文件输入()获取“返回”的“作业计数”。你只需要“&amp;”,传入指向“jobcount”的指针:
...
const int MAX = 40;
void fileinput(struct record jobs[MAX], int * jobcount);
...
int main(void)
{
struct record jobs[MAX];
int jobcount=-1;
fileinput(jobs,&jobcount);
output(jobs,jobcount);
return(0);
}
void fileinput(struct record jobs[MAX], int * jobcount){
*jobcount = 0;
FILE *f = fopen("data.dat","r");
while(
(fscanf(f, "%s %d %d %d", jobs[jobcount].name, &jobs[jobcount].arrival_time,
&jobs[jobcount].job_length, &jobs[jobcount].job_priority) != EOF) &&
(*jobcount < MAX) )
{
*jobcount++;
printf("READ IN TEST \n");
}
...