Выяснить, имеются ли в школе однофамильцы - C (СИ)
Формулировка задачи:
Помогите исправить ошибку.Почему он не вводит данные в массив.
Сведения об ученике состоят из его имени и фамилии и названия класса (года обучения и буквы), в котором он учится. Дан файл f, содержащий сведения об учениках школы.
Выяснить, имеются ли в школе однофамильцы.
Программный код:
#include <stdio.h>
#include <stdlib.h>
#define n 10
int main()
{struct rec
{char name[15];
char fam[15];
char kl[15];
char god[15];
unsigned long int zip;};
struct rec array[n];
int i,c,j;
FILE *pf;
pf=fopen("new1.txt","w");
printf("Vvedite kolichestvo uchenikov:\n");
scanf("%d",&c);
for(i=1;i<c; ++i)
{printf("Vvedite famili:\n");
scanf("%s",fam[i]);
printf("Vvedite imya:\n");
scanf("%s",name[i]);
printf("Vvedite klass:\n");
scanf("%d",kl[i]);
printf("Vvedite god:\n");
scanf("%d",god[i]);
}
printf("Odnofamily:\n");
for(i=1;i<c; ++i)
for(i=1;i<c; ++i)
if (array[i].fam == array[j].fam; i!=j)
printf("%s%s",array[i].fam, array[i].name);
fclose(pf);
system("PAUSE");
return 0;
}Решение задачи: «Выяснить, имеются ли в школе однофамильцы»
textual
Листинг программы
#include <stdio.h>
#include <conio.h>
#include <string.h>
main()
{
struct rec
{
char name[15], fam[15],
kl[15], god[15];
};
rec array[100];
FILE *f;
int i, c=0, j;
f = fopen("new1.txt","r");
while (! feof(f))
{
fscanf(f,"%s",array[c].fam);
fscanf(f,"%s",array[c].name);
fscanf(f,"%s",array[c].kl);
fscanf(f,"%s",array[c].god);
c++;
}
fclose(f);
printf("Однофамильцы:\n");
for (i=0; i<=c; i++)
for (j=i+1; j<c; j++)
if (strcmp(array[i].fam, array[j].fam) == 0)
printf("%s %s %s %s - %s %s %s %s\n",array[i].fam, array[i].name, array[i].kl, array[i].god,
array[j].fam, array[j].name, array[j].kl, array[j].god);
getch();
}
Объяснение кода листинга программы
В этом коде используется язык программирования C. Вот список действий, которые выполняются в этом коде:
- Включаются необходимые заголовочные файлы.
- Определяется структура данных
rec, которая содержит поля для имени, фамилии, класса и бога. - Создается массив структур
recс именемarrayи размером 100. - Открывается файл
new1.txtдля чтения с помощью функцииfopen. - В цикле
whileпроисходит чтение данных из файлаnew1.txtс помощью функцииfscanf. Данные сохраняются в массивеarray. - Файл
new1.txtзакрывается с помощью функцииfclose. - Выводится сообщение
Однофамильцы:. - В двух вложенных циклах
forпроисходит сравнение фамилий в массивеarray. Если фамилии совпадают, то выводится информация об однофамильцах. - Программа ожидает нажатия клавиши с помощью функции
getch.