如何将文本文件中逗号分隔的字符串扫描到C中的单独结构成员中?

时间:2017-04-21 17:20:57

标签: c string macos csv

我遇到了程序的障碍。我使用字段id,first_name,last_name,email,gender和grade声明了一个结构学生。然后我声明了一个结构数组,struct student record [10000]。然后我编写代码来计算CSV文件中的行数。然后我将文件的第一行读作字符串“header_row”。

然后我尝试将id字段fscanf到结构数组成员record [0] .id中。这部分工作正常。接下来的部分是我遇到的问题。我写道:

    fscanf(fp, "%s", record[0].first_name);

并且fscanf命令将行的其余部分中的所有逗号视为字符串的一部分,因此它将以下内容扫描到记录[0] .first_name:

,马丁,韦尔奇mwelch0 @ ehow.com,男,80

如何为逗号分隔的字符串fscanf,如何告诉C逗号不是字符串的一部分,而是逗号是分隔符?

我写的代码如下:

    #include <stdio.h>

    struct student
    {
        int id;
        char first_name[20];
        char last_name[20];
        char email[50];
        char gender[6];
        int grade;
    };

    int main()
    {
        FILE *fp;
        int count_lines = 0;
        char chr, header_row[44];
        struct student record[10000];

        fp = fopen("/Users/tenorjas/Documents/USF courses/EEL 2161 C programming/exampledata.csv","r");

        // extract character from file and store in chr
        chr = getc(fp);

        while (chr != EOF)
        {
            // Count whenever new line is encountered
            if (chr == '\n')
            {
                count_lines = count_lines + 1;
            }

            // Get next character from file
            chr = getc(fp);
        }

        printf("There are %i lines in file exampledata.csv\n", count_lines);

        fseek(fp, 0, SEEK_SET); // go back to beginning of file

        fgets(header_row, 44, fp); // read the header row of the file
        printf("%s\n", header_row); // display the header row

        fscanf(fp, "%i", &record[0].id);
        printf("%i\n", record[0].id);
        fscanf(fp, "%s", record[0].first_name);
        printf("%s\n", record[0].first_name);
        fclose(fp); // close file

        return 0;
    }

我从该代码得到的输出如下:

exampledata.csv文件中有1001行 ID,名字,姓氏,电子邮件地址,性别,等级 1 ,马丁·韦尔奇,mwelch0 @ ehow.com,男,80 程序以退出代码结束:0

我想要发生的是: “1”最终出现在“id”字段中 “Martin”最终出现在“first_name”字段中 “Welch”最终出现在“last_name”字段中 “mwelch0@ehow.com”最终出现在“电子邮件”字段中 “男性”最终进入“性别”领域 “80”最终进入“等级”领域

0 个答案:

没有答案