0

Добрые день форумчанам!

Я сейчас делаю программу для формирования и обработки хэш-таблицы. Данные вводятся из файла: ключ-цифровой код, а - данные фамилия, инициалы. Типа такого:

"Добрый.А.Ю.
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. И инициалы, и ключ считывать как строки, а не как строку и длинное число

  • Не понял. У вас в файле ФИО и ключ в одной строке, или, как в вопросе, в разных? ФИО не разделены пробелом (т.е. представляют собой одно слово)? Пока не будет точного описания входных данных, особо говорить не о чем. "При отсутствии точного ТЗ результат ХЗ". – Harry Jun 15 '22 at 08:35
  • Да, вдогонку: за это — while (!feof(ftxt)) — джунам копчик массируют :) – Harry Jun 15 '22 at 08:44
  • @Harry, по поводу первого коммента: "Да, ФИО и ключ в одной строке, и да ФИО - как одно слово". И по поводу второго коммента: "А как тогда правильно?" –  Jun 15 '22 at 09:12
  • Тогда почему вам не нравится ваш способ? Чем он для вас плох? Читает же нормально, зачем обязательно fgets? А по второму — проверять, успешно ли считаны данные в теле цикла. Ведь вы же этого не делаете... – Harry Jun 15 '22 at 09:34
  • @Harry, он не плох, но если все так и оставить, то если в файле в самом конце будет какой-то лишний пробел или переход, у меня последняя запись в строке дублируется –  Jun 15 '22 at 09:42
  • Вот потому и дублируется, что while (!feof(ftxt))! Вы по ссылке во втором комментарии переходили? Читали? Нет? Вот она еще раз: https://ru.stackoverflow.com/q/833980/195342 Обратите внимание на получаются неприятности - лишняя считанная строка, например в тексте вопроса... Кстати, замечу, что по сути вы спросили не "как правильно забить гвоздь?", а "какой рукой держать бутылку при забивании ею гвоздя?"... – Harry Jun 15 '22 at 09:43

0 Answers0