Здравствуйте почему не работает программа на си?

Мне нужно в этой программе описать структуру и работать с ней но уже выдает ошибки при подключении текстового файла. Кампилятору не нравиться типы данных почему то и не нравиться сканф и fopen. В чем может быть проблема подскажите пожалуйста.

#include <stdio.h>

struct worker {
    char name[50];
    char work[20];
    int time;
    int pay;
    int born;
};

struct worker workers_list[10];



int main()
{
    int n = 10;
    FILE* file;
    int i = 0;

    file = fopen("fscanf.txt", "w");
    while (fscanf(file, "%s%s%d%d%d",
        &(workers_list[i].name), &(workers_list[i].work),
        workers_list[i].time, workers_list[i].pay, workers_list[i].born) != EOF)
    {
        printf("%s%s%d%d%d\n", workers_list[i].time, workers_list[i].pay, workers_list[i].born);
        i++;
    }
    fclose(file);
}

Ответы (1 шт):

Автор решения: DmitryK

Во-первых, вы открываете файл на запись и пытаетесь читать из него. При открытии существующего файла просто на запись, всё содержимое затирается. Если файла не было - он создастся.
Во-вторых у вас неправильно указаны параметры, и компилятор сообщает вам об этом. Спецификатор "%s" требует в параметрах char*. А вы передаете char**, т.к. имя символьного массива является указателем на него.

// неправильно
fscanf(file, "%s%s%d%d%d", &(workers_list[i].name),
// правильно
fscanf(file, "%s%s%d%d%d", workers_list[i].name,

А для int - наоборот нужно передать адрес

// неправильно
fscanf(file, "%s%s%d%d%d", , , workers_list[i].time,
// правильно
fscanf(file, "%s%s%d%d%d", , , &(workers_list[i].time),

Ну и в printf у вас аргументов меньше, чем спецификаций

→ Ссылка