我有一个.txt文件,每一行都包含:StudentID,firstName,lastName和score。我想用C编写一个程序,该程序读取.txt文件并将每个学生的所有信息存储在RECORD(数据结构)中。问题是我不知道为了分别读取每个不同的元素(StudentID,firstName等)而必须使用的条件,因为它们只是用空格''分隔,然后还有一个问题更改行以存储下一个学生的信息...有帮助吗?
答案 0 :(得分:0)
以下建议的代码段应足以指导您编写应用程序。
要编译/链接以下代码,您将需要头文件:
#include <stdio.h> // fgets(), fopen(), fclose(), perror()
#include <stdlib.h> // exit(), EXIT_FAILURE, strtof()
#include <string.h> // strtok(), strcpy(), strtol()
关于;
StudentID , firstName, lastName and score.
因此,每个学生要输入4个字段。
这些字段多长时间?
对尺寸进行合理的猜测:
StudentID is unsigned long integer
FirstName is char array, max 30 characters
LastName is char array, max 30 characters
Score is float
一个容纳一个学生的结构将是:
struct student
{
size_t StudentID;
char FirstName[30];
char LastName[30];
float Score;
};
假设输入文件是文本行,然后读取一行
// open the file for reading
if( !(fp = fopen( "studentFile.txt", "r" ) ) )
{
perror( "fopen for student input file failed" );
exit( EXIT_FAILURE );
}
struct student *students = NULL;
size_t studentCount = 0;
char buffer[128];
while( fgets( buffer, sizeof( buffer ), fp ) )
{
然后必须将每一行分成相关字段并放入struct实例中
// increase number of students in array by 1
struct student * temp = realloc( students, (studentCount+1) * sizeof( struct student ) );
if( !temp )
{
perror( "realloc for new student data failed:" )
free( students );
exit( EXIT_FAILURE );
}
students = temp;
char *token = strtok( buffer, " ");
if( token )
{
students[ studentCount ]->StudentID = (size_t)strtol( token, 10 );
if( (token = strtok( NULL, " " ) )
{
strncpy( students[ studentCount ]->FirstName, token. sizeof( student.FirstName) )l
if( (token = strtok( NULL, " " ) )
{
strncpy( students[ studentCount ]->LastName, token, sizeof( student.LastName );
if( (token = strtok( NULL, " " ) )
{
students[ studentCount ]->Score = strtof( token, NULL );
}
}
}
}
studentCount++;
}
然后,输入文件中所有学生信息行现在都是struct student
数组中的实例
如果您需要更多帮助,请在此答案下方发布任何澄清要求等内容作为评论