【发布时间】:2021-10-13 02:18:17
【问题描述】:
我对 C 很陌生,但有一个大学作业要完成,所以请原谅这个问题的任何愚蠢之处。
我正在尝试将 CSV 解析为结构。当我运行以下代码时,我在编译时没有遇到任何问题,并且运行良好(尽管只打印出结果,并没有将它们分配给结构):
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
// Structs
struct Course {
char *course_name[50];
int grade;
};
struct Student {
char* name;
struct Course;
int index;
};
char *dataArr[6] = {"Intro to Programming","Databases","Computer Architecture","Ethics in Computer Science","Advanced Programming","Puzzles and Problem Solving"};
// Expand this section for the initial interactivity
// =============================================================================================
void Import_and_Print()
{
printf("\nPlace for importing files and printing results.\n\n");
FILE * fp;
char * line = NULL;
size_t len = 0;
ssize_t read;
int in_grade;
int i = 0;
const char s[2] = ",";
char *token;
char *sName;
int j;
//fp = fopen("CTASample.csv", "r");
fp = fopen("Sample2.csv", "r");
if (fp == NULL)
exit(EXIT_FAILURE);
read = getline(&line, &len, fp);
j = 0;
while ((read = getline(&line, &len, fp)) != -1) {
char *csvData = line;
token = strtok(csvData,s);
i = 0;
while (token != NULL) {
if (isalpha(token[0]) != 0) {
strcpy(sName, token);
printf("Student name: %s\n", sName);
}
else {
int in_grade = atoi(token);
//printf("%0.f\n", in_grade);
//printf("\n");
printf("Course: %s\tGrade: %i\n", dataArr[i], in_grade);
//struct Course course = {dataArr[i], in_grade};
//struct Student name = {sName, {dataArr[i], in_grade}};
i++;
}
token = strtok(NULL, s);
fflush(stdin);
}
printf("\n\n");
}
}
但是,如果我将最后一个注释行更改为取消注释,我会收到以下错误:
Grades.c:在“Import_and_Print”函数中:Grades.c:64:60:警告: 从'int'初始化'char *'使指针来自整数 没有演员表[-Wint-conversion] 64 |结构 学生姓名 = {sName, {dataArr[i], in_grade}}; | ^~~~~~~~ Grades.c:64:60: 注意:(接近初始化为 ‘name..course_name[1]’)
csv 文件如下所示:
Intro to Programming,Databases,Computer Architecture,Ethics in Computer Science,Advanced Programming,Puzzles and Problem Solving
James Jameson,80,70,55,12,50,80
Peter Parker,50,55,50,50,50,50
Mary Janeson,40,40,40,23,40,45
关于如何解决的任何建议,以便将 csv 中的值正确输入到结构中?
【问题讨论】:
-
旁白:注意
fflush()在打开输入的流上是未定义的。 -
此外,
else代码块中定义的(已注释掉的)structs 将在块末尾超出范围。 -
只是浏览数据和代码显示代码需要逗号 (
,) 分隔符 (const char s[2] = ",") 而数据有管道分泌器 (|)...考虑更新程序中的分隔符... (const char s[2] = "|") -
@Myst - 我编辑了 OP 以显示正确的输入。不知道为什么它显示管道,因为文件是逗号。