Следующие предложенные фрагменты кода должны быть достаточными для написания вашего заявления.
чтобы скомпилировать / связать следующий код, вам понадобятся заголовочные файлы:
#include <stdio.h> // fgets(), fopen(), fclose(), perror()
#include <stdlib.h> // exit(), EXIT_FAILURE, strtof()
#include <string.h> // strtok(), strcpy(), strtol()
относительно *; 1006 *
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 ) )
{
тогда каждая строка должна быть разбита на соответствующие поля и помещена в экземпляр структуры
// 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
Если вам нужна дополнительная помощь, отправьте любые запросы на ясность и т. Д. Ниже этого ответа в качестве комментария