我有一个学生详细信息的.txt文件。学生详情如下:
Std_no: 222
Std_name: Dani
Std_gender: M
Std_no: 345
Std_name: John
Std_gender: M
我所做的是创建了一个包含成员的结构:
struct student
{
int Std_no;
char* Std_name;
Char* Std_gender;
}
我已经定义了一个指向(学生结构)的链表,以便在检索输出时可以迭代它。
struct sstudent_elements
{
struct student *p
struct student_element *next;
}
我想要实现的是能够读取.txt文件,将值分配给学生结构成员。感谢您的帮助&建议。如果我正在做的任何错误或问题,请随时告诉我。
的问候。
答案 0 :(得分:0)
这似乎是作业,你应该这样标记。
我建议阅读fopen - 这将有助于您获取FILE对象来访问该文件,并阅读有关如何使用fscanf的示例。请注意,scanf有点棘手,您可能会发现使用fgets“手动”解析行更容易获取行和strchr或类似的调用来查找字段分隔符。
答案 1 :(得分:0)
试试这个:
typedef struct
{
int Std_no;
char* Std_name;
char* Std_gender;
} student;
int parseStdNo(char *line)
{
return atoi(line + 8);
}
char *parseStdName(char *line)
{
return line + 10;
}
char *parseStdGender(char *line)
{
return line + 12;
}
int main()
{
char *fileLocation = "/path/to/my/file";
FILE *file = fopen(fileLocation, "r");
if (!file)
{
printf("%s\n", strerror(errno));
}
// assume max file size of 1 kb, any more and you may consider malloc-ing your array
char buffer[1024];
// assume max of 128 students, any more and you may consider malloc-ing your array
student students[128];
if (fread(buffer, 1, sizeof(buffer), file))
{
// buffer now contains our file data
char *line = strtok(buffer, "\n");
int studentIndex = 0;
students[studentIndex].Std_no = parseStdNo(line);
// 0 is number, 1 is name, 2 is gender
int lineType = 1;
while ((line = strtok(NULL, "\n")))
{
if (lineType == 3)
{
studentIndex++;
lineType = 0;
}
switch (lineType) {
case 0:
{
students[studentIndex].Std_no = parseStdNo(line);
break;
}
case 1:
{
students[studentIndex].Std_name = parseStdName(line);
break;
}
case 2:
{
students[studentIndex].Std_gender = parseStdGender(line);
break;
}
}
lineType++;
}
for (int i = 0; i <= studentIndex; i++) {
printf("student\n\tnumber %i\n\tname: %s\n\tgender: %s\n", students[i].Std_no, students[i].Std_name, students[i].Std_gender);
}
}
else {
printf("could not read from file\n");
}
getchar();
return 0;
}