Помогите с файлами на С
У меня задача сформировать файл, содержащий информацию о 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 шт):
Ну, здесь
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);
}
}