从文件中读取7个变量(每个变量1行)并分配给struct变量

时间:2013-03-25 19:03:13

标签: c file input struct stream

我正在制作一个简单的注册系统,该系统维护着一组计算机科学学生的数据库。每个学生记录包含

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct student
{

   char name[300];   
   int age;
   char course_1[40];
   char course_2[40];
   char *remarks;

};

struct course

{

   char course_title[200];
   int  cse_num[100];
   char instructor[200];
   char date[50];
   char start_time[50];
   char end_time[50];
   char location[50];

};


main()

{

  int i;
  struct course data[11];
  FILE *f;
  char title[100];
  int num[100];
  char instructor[100];
  char date[100];
  char start_time[100];
  char end_time[100];
  char location[100];
  char line[300];

  f = fopen("course.dat", "r");


  i=0;


  while(*fgets(line, 300, f) != '\n')

  {
      sscanf(line, "%99[^\n]", num);
      sscanf(line, "%99[^\n]", title);
      sscanf(line, "%99[^\n]", instructor);
      sscanf(line, "%99[^\n]", date);
      sscanf(line, "%99[^\n]", start_time);
      sscanf(line, "%99[^\n]", end_time);
      sscanf(line, "%99[^\n]", location);

      data[i].cse_num = num // doesn't work

      strcpy(data[i].course_title, title);
      strcpy(data[i].instructor, instructor);
      strcpy(data[i].date, date);
      strcpy(data[i].start_time, start_time);
      strcpy(data[i].end_time, end_time);
      strcpy(data[i].location, location);


      i++;


  }

  fclose(f);


}

我的问题是如何从文件中获取输入,因为它是7行,直到考虑新行。我尽力解释这一点,谢谢你能不能帮我们!我真的专注于这一点,实在是无法弄明白。这是文件:

示例输入:

CSE1001
Research Directions in Computing
Wildes, Richard
W
16:30
17:30
VC 135

3 个答案:

答案 0 :(得分:1)

不要忘记,您还必须strcpy(data[i].course_title, title);

这适用于所有字符串。

您目前正在执行此操作:data[i].course_title = title;

答案 1 :(得分:0)

考虑使用scanf。它是一个通用的函数,用于解析来自终端或具有fscanf变体的文件的输入。它已经是你要包含的库的一部分,并且在格式上类似于printf,你将使用它们进行程序输出。

答案 2 :(得分:0)

您错误宣布main()

struct course
{
    char course_title[200];
    int  cse_num[100];
    char instructor[200];
    char date[50];
    char start_time[50];
    char end_time[50];
    char location[50];
}

main()
{

这表示main()返回struct course。那是错的。

  1. 在结构后添加分号。
  2. 始终为每个功能提供显式类型。 C99需要它;这是C89的好习惯。
  3. 代码应该开始:

    struct course
    {
        char course_title[200];
        int  cse_num[100];
        char instructor[200];
        char date[50];
        char start_time[50];
        char end_time[50];
        char location[50];
    };
    
    int main(void)
    {
    

    你应该从C编译器那里收到关于这个错误的警告。如果你不是,你要么需要打开警告,要么需要更好的编译器。

    这可能与您面临的其他问题直接相关,但也应该修复。