我遇到了程序的障碍。我使用字段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”最终进入“等级”领域