Помогите с файлами на С

У меня задача сформировать файл, содержащий информацию о 10 автолюбителях: фамилию, марку автомобиля, цвет, номер. Используя эти данные, предоставить информацию об автолюбителях, имеющих "Жигули" белого цвета, и их номер начинается с 45. Я написал код, но он выдает ошибки, помогите исправить.

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void main ()
{   
    int n;
    int *pr = NULL;
    pr = (int*) malloc(100);
    int *m = NULL;
    m = (int*) malloc(100);
    int *k = NULL;
    k = (int*) malloc(100);
    int *no = NULL;
    no = (int*) malloc(100);
    FILE *A;    
    A=fopen("cars.txt","w");
    if (A!= NULL) {
for (int i=0; i<n; i++){
printf("Введіть кількість автолюбителів: ");
scanf("%i",&n); 

printf("Прізвище: ");
scanf("%s",&pr); 

printf("Марка: ");
scanf("%s",&m); 

printf("Колір: ");
scanf("%s",&k); 

printf("Номер: ");
scanf("%s",&no);

printf("%s\n%s\n%s\n%s\n",pr,m,k,no);
fprintf(A,"%s\n%s\n%s\n%s\n",pr,m,k,no); 
}
}
fclose(A);

{
    A=fopen("car.txt","r+");
    if (A!= NULL) {
printf("Білі жигулі з номером, який починається на 45 :\n");
while (!feof(A))
        {
            fscanf(A,"%s\n%s\n%s\n%s\n",&pr,&m,&k,&no);
            if ((int *strcmp(char *m=="zhyguly" &&
                *k=="bilyy"  &&
                *no(1,2)=="45"))
               {
                printf("%s\n%s\n%s\n%s\n", pr, m, k, no);
                }
            
fclose(A);
return 0;
}
}
}

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

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

Ну, здесь

scanf(A,"%i\n%i\n%i\n%i\n",pr,m,k,no);

вы читаете из файла, и функция нужна соответствующая: fscanf

fscanf(A,"%i\n%i\n%i\n%i\n",pr,m,k,no);

Только вот сравнение в C так:

m="жигулi"

не делается. Это — присваивание! Но даже если вы и написали бы == — то это было бы сравнение указателей, а не строк. Для сравнения строк нужно использовать функцию strcmp().

Еще: int pr; int m; int k; int no; ... printf("Фамилия: "); scanf("%i",&pr);

У вас фамилия — это просто целое число? Как и модель? и номер? Как я понимаю, вам нужно вводить строки...

Что вы хотите сказать выражением no(1,2) — при том, что no — это просто значение типа int — для меня загадка. Первые две цифры? Но это делается совсем не так...

Update

Примерно вот что вам нужно:

int main()
{   
    int n;
    char pr[60];
    char m[60];
    char k[60];
    int no;
    FILE *A = fopen("cars.txt","w");
    if (A!= NULL) {
        printf("Введiть кiлькiсть автолюбителiв: ");
        scanf("%i",&n);
        for (int i=0; i<n; i++){
            printf("Прiзвище: ");
            scanf("%s",pr);      // ТОЛЬКО ОДНО СЛОВО!!!!

            printf("Марка: ");
            scanf("%s",pr);      // ТОЛЬКО ОДНО СЛОВО!!!! Mersedes Benz нельзя!!!

            printf("Колiр: ");
            scanf("%s",k);       // ТОЛЬКО ОДНО СЛОВО!!!! Мокрый асфальт - нельзя!!!

            printf("Номер (чотиризначне число): ");
            scanf("%d",&no);

            printf("Введено: %s\n%s\n%s\n%d\n",pr,m,k,no);
            fprintf(A,"%s\n%s\n%s\n%d\n",pr,m,k,no);
        }
    }
    fclose(A);

    A = fopen("car.txt","r+");

    if (A!= NULL) {
        printf("Бiлi жигулi з номером, який починається на 45 :\n");
        while(fscanf(A,"%s\n%s\n%s\n%d\n",pr,m,k,&no) == 4)
        {
            if (strcmp(m,"zhyguly") == 0 &&
                strcmp(k,"bilyy") == 0  &&
                no/100 == 45)
            {
                printf("%s\n%s\n%s\n%d\n", pr, m, k, no);
                break;
            }
        }
        fclose(A);
    }
}
→ Ссылка