Closed. This question needs details or clarity。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗?添加详细信息并通过editing this post阐明问题。
                        
                        5年前关闭。
                                                                                            
                
        
我需要做的是打开一个文件,以读取以下数据。我已经完成了打开文件的几乎所有工作,但是我停留在需要标记信息并将其添加到结构数组的部分。输入数据如下所示:

John is enrolled in MATH 1426.
Peter is enrolled in SCI 1441.
John is enrolled in PHYS 1201.


这是我的struct看起来需要将数据读入的样子:

struct classes {
  char name[20];
  char department[4];
  int course_number[4];
};


这是我用于打开文件并将其读入上述struct的代码:

int main(void)
{
  FILE *file;
  char buffer[50];
  char line[50];
  struct classes student;

  file = fopen("inputfile.txt", "r");

  while (fgets(buffer, sizeof(buffer), fp))
  {
     tokenize = strtok(buffer, " ");
     strcpy(line, tokenize);
     while(tokenize != NULL)
     {
        token = strtok(NULL, " ");
        switch(i)
        {
          case 3: strcpy(student.department, token);
             break;
          case 5: student.course_number = atoi(token);
        }
     }
     i++;
  }
  i=0;
}


我在这里想要做的是将数据标记化为结构数组,但无法正常工作。我究竟做错了什么?

最佳答案

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

struct classes {
    char name[20];
    char department[5];//+1 for '\0'
    int course_number;
};

int main(void){
    FILE *file;
    char buffer[50];
    struct classes student, students[48];
    int i, count=0;

    file = fopen("inputfile.txt", "r");

    while (fgets(buffer, sizeof(buffer), file)){
        //Format : NAME is enrolled in DEPARTMENT NUMBER.
        if(3 == sscanf(buffer, "%19s %*s %*s %*s %4s %d",
                student.name, student.department, &student.course_number))
                students[count++] = student;
    }
    fclose(file);
    for(i = 0; i < count; ++i){
        printf("%-*s %-*s %d\n",
            (int)sizeof(student.name), students[i].name,
            (int)sizeof(student.department), students[i].department,
            students[i].course_number);
    }
    return 0;
}

关于c - 从文本文件解析输入数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24643651/

10-09 07:12
查看更多