在C中传递变量

时间:2011-10-30 04:37:39

标签: c

我有一个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

3 个答案:

答案 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");
    }
  ...