Добрые день форумчанам!
Я сейчас делаю программу для формирования и обработки хэш-таблицы. Данные вводятся из файла: ключ-цифровой код, а - данные фамилия, инициалы. Типа такого:
"Добрый.А.Ю.
8347847232"
Считывание строк делаю с помощью fscanf, а нужно через fgets. Но fgets считывает всю строку целиком, и я не знаю как разделить считывание инициалов и ключа. подскажите пожалуйста, если знаете
Фрагмент кода:
int itemIdx = 0;
INFO* item = NULL;
HTAB* table = NewHTAB(30);
char name[MAX_NAME], key[LEN];
system("chcp 1251");
FILE* ftxt;
if (!(ftxt = fopen("RGR_2_AP.txt", "r"))) {
puts("\n Файл не найден...\n");
return 0;
}
while (!feof(ftxt)) {
fscanf(ftxt, "%s%s", name, key);
Insert(table, key, name);
}
fclose(ftxt);
P.S. И инициалы, и ключ считывать как строки, а не как строку и длинное число
while (!feof(ftxt))— джунам копчик массируют :) – Harry Jun 15 '22 at 08:44fgets? А по второму — проверять, успешно ли считаны данные в теле цикла. Ведь вы же этого не делаете... – Harry Jun 15 '22 at 09:34while (!feof(ftxt))! Вы по ссылке во втором комментарии переходили? Читали? Нет? Вот она еще раз: https://ru.stackoverflow.com/q/833980/195342 Обратите внимание на получаются неприятности - лишняя считанная строка, например в тексте вопроса... Кстати, замечу, что по сути вы спросили не "как правильно забить гвоздь?", а "какой рукой держать бутылку при забивании ею гвоздя?"... – Harry Jun 15 '22 at 09:43