3

好的。我的主目录中有一个名为“Graduates.txt”的文件。
我有一个可移植的程序来查找主目录,并打开文件进行阅读。
文件中的数据如下所示:

year,firstName,lastName

我需要从此文件中获取这些数据,并将其分离到我的结构中:

typedef struct alumnus {

    int yearGraduated;
    char firstName[30];
    char lastName[30];

} Alumns;

我有一个想法可能行不通:
while 循环读取文件,使用 fgets() 获取数据。然后它将它复制到结构中......但我不知道如何实现这些。

抱歉,如果这听起来像是愚蠢的问题,那很可能是。

4

3 回答 3

3
#include <stdio.h>

typedef struct alumnus {
    int yearGraduated;
    char firstName[30];
    char lastName[30];
}Alumns;

int main(void) {

    Alumns REC1;

    FILE *fptr;
    fptr = fopen("Test.txt", "r");

    fscanf(fptr, "%d,%s,%s", &REC1.yearGraduated, REC1.firstName, REC1.lastName);

    printf("%d, %s, %s", REC1.yearGraduated, REC1.firstName, REC1.lastName);
}

使用 dasblinkenlight 提示实现。

于 2013-10-19T14:59:05.703 回答
2
  1. 使用 fgets 从文件中读取一行
  2. 使用字符串标记化来分隔各个元素

同样使用 strtok()。例如

   FILE *fp;
   fp = fopen("path", "r");
   char string[150];
   char *token;

   while(!feof(fp)) {
       if (fgets(string,150,fp)) {
           printf("%s\n", string);
           token=strtok(string,",");
           /*Store this token in your struct(your first element) */ 
       }
   }

3.记住strtok()是不可重入函数,所以存储strtok()的每个函数调用返回的结果;

于 2013-10-19T14:56:38.577 回答
0

以下是读取输入、使用 以及如何使用正确格式字符串格式化输出的快速示例fopen():(fgets()此处strtok()显示的输出)

在此处输入图像描述

编辑显示将值放入 struct Alums

 #include <ansi_c.h>

typedef struct alumnus {  //Note "alumnus" is not necessary here, you have Alumns 
    int yearGraduated;    //below that will satisfy naming the typedef struct
    char firstName[30];
    char lastName[30];

}Alumns;

Alumns a, *pA;  //Create copy of struct Alumns to use

#define FILE_LOC  "C:\\dev\\play\\file10.txt"

int main(void)
{
    FILE *fp;
    char *tok;
    char input[80];

    pA = &a;  //initialize struct

    fp = fopen(FILE_LOC, "r");  //open file (used #define, change path for your file)
    fgets(input, 80, fp);
    tok = strtok(input, ", \n"); //You can also call strtok in loop if number of items unknown
    pA->yearGraduated= atoi(input); //convert this string in to integer
    tok = strtok(NULL, ", \n");
    strcpy(pA->firstName, tok); //copy next two strings into name variables
    tok = strtok(NULL, ", \n");
    strcpy(pA->lastName, tok);
    //note the format strings here for int, and char *
    printf("age:%d\n First Name: %s\n Last Name: %s\n", 
             pA->yearGraduated, pA->firstName, pA->lastName);
    getchar();  //used so I can see output
    fclose(fp);
    return 0;
}
于 2013-10-19T14:56:22.787 回答