Структуры си. Редкое имя
помогите, пожалуйста, разобраться с кодом.
Входной файл input.txt: содержит список учащихся школы. В каждой строке через пробел заданы Фамилия
Имя и Отчество ученика. Требуется определить, какое имя самое редкое.
Число учеников в школе <= 10000.
Файл результата output.txt: содержит одну строку с искомым именем.
Пример input.txt:
Пушкин Александр Сергеевич
Луканов Александр Сергеевич
Соколова Любава Викторовна
Иванов Иван Иванович
Сидоров Иван Петрович
output.txt для данного примера: Любава
Код:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
int main()
{
struct s_i_s
{
int k;
char name;
};
char s_i_s;
int t[10000];
char s1, s2, s3;
int i, n = 0, ans, min;
bool fl;
while (scanf("%s %s %s", &s1, &s2, &s3)
{
fl = true;
for (i = 0; i < n && fl; i++)
{
if (s2 == t[i].name)
{
t[i].k++;
fl = false;
}
}
if (fl)
{
t[n].name = s2;
t[n++].k = 1;
}
}
ans = 0; min = t[0].k;
for (i = 1; i < n; i++)
{
if (t[i].k < min)
{
min = t[i].k;
ans = i;
}
}
printf("%s\n", t[ans].name);
return 0;
}
Код не работает, помогите, пожалуйста, исправить
Ответы (1 шт):
Начнем с того что вы читаете (пытаетесь читать, понятно, что получается ерунда) строки в символы:
char s1, s2, s3;
....
scanf("%s %s %s", &s1, &s2, &s3)
ну вот как какой-нибудь "Иван" может влезть в место в памяти, куда может поместиться только один символ? Вот оно и пишет куда-то в соседнюю память, портя ее и приводя к неопределенному поведению...
Это если бы было, как вы говорите - "код не работает". Но он и не компилируется - например, в строке
while (scanf("%s %s %s", &s1, &s2, &s3)
не хватает закрывающей скобки. Если даже ее добавить - t у вас массив целых чисел, какое там поле name у них?
int t[10000];
...
if (s2 == t[i].name)
Словом, садитесь-ка вы за учебники; этот код не исправлять надо, а переписывать...