Попытка записать несколько строк в файл из структуры в C - PullRequest
0 голосов
/ 07 мая 2020

Я пишу небольшую программу, которая выводит данные учеников в текстовый файл, я сохраняю эти данные в массиве структур, а затем пытаюсь вывести эти данные в текстовый файл; Но по какой-то причине он выводит только самые последние введенные данные.

struct students
{
    char *familyName[20], *firstName[20];
    int enrolNum, mark1, mark2, mark3;
} st[1000];

FILE *fptr;
int studentNum;
int i = 0;
void main()
{
    double markOne, markTwo, markThree;

    markOne = st[i].mark1 * 0.30;
    markTwo = st[i].mark2 * 0.40;
    markThree = st[i].mark3 * 0.30;
    char *fName;
    do
    {
        ptr = fopen("student.txt", "a+");
        fprintf(fptr, "Family name \tFirst name \tenrolment number \tartefact mark 1 \tartefact mark 2 \tartefact mark 3 \n");
        fprintf(fptr,"%s \t\t%s \t\t%d \t\t\t%.1f%% \t\t%.1f%%  \t\t%.1f%% \n", st[i].familyName, st[i].firstName, st[i].enrolNum, markOne, markTwo, markThree);
        printf("\n%d\n%d", i, studentNum);
    } while( i < studentNum);
    fclose(fptr);
}

Кажется, я не могу понять, почему он выводит только самые свежие данные, а не все их. какие-либо намеки на то, зачем он это сделал?

Большое спасибо Стиву

1 Ответ

2 голосов
/ 07 мая 2020

Напишите строку ptr = fopen("student.txt", "a+"); вне l oop. Вы получите то, что хотите.

struct students
{
    char *familyName[20], *firstName[20];
    int enrolNum, mark1, mark2, mark3;
} st[1000];

FILE *fptr;
int studentNum;
int i = 0;
void main()
{
    double markOne, markTwo, markThree;

    markOne = st[i].mark1 * 0.30;
    markTwo = st[i].mark2 * 0.40;
    markThree = st[i].mark3 * 0.30;
    char *fName;
    ptr = fopen("student.txt", "a+");
    do
    {

        fprintf(fptr, "Family name \tFirst name \tenrolment number \tartefact mark 1 \tartefact mark 2 \tartefact mark 3 \n");
        fprintf(fptr,"%s \t\t%s \t\t%d \t\t\t%.1f%% \t\t%.1f%%  \t\t%.1f%% \n", st[i].familyName, st[i].firstName, st[i].enrolNum, markOne, markTwo, markThree);
        printf("\n%d\n%d", i, studentNum);
    } while( i < studentNum);
    fclose(fptr);
}

Проблема с вашим кодом в том, что ptr = fopen("student.txt", "a+"); вызывается каждый раз, когда выполняется l oop. И снова открывается файл ptr. Он не был закрыт во время предыдущей итерации. Если вы добавите fclose(fptr); в l oop, он также будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...