@Retr0Hacker

Как избежать дублирования последней строки из файла?

Делаю сейчас программу для формирования и обработки хэш-таблицы. Связка такая: ключ - цифровой код, а данные - ФИО. Типа такого: "Добрый.А.Ю. 8347847232". Данные записаны в файл в одной строке через пробел. Но если в самом конце файла будет переход на строку или лишний пробел, то последняя запись дублируется. Вероятно это из-за вот этого: while (!feof(ftxt)).

Не знаю, чем это можно заменить.

Фрагмент кода:

int itemIdx = 0;
	INFO* item = NULL;
	HTAB* table = NewHTAB(30);
	char name[MAX_NAME], key[LEN];

	int choice = 0, c;

	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);

	printf("\n");
	printf(" Индекс\t|      Ключ\t|     Ф.И.О\t        |\n");
	printf("-------------------------------------------------\n");
	Display(table);
  • Вопрос задан
  • 60 просмотров
Решения вопроса 1
wataru
@wataru
Разработчик на С++, экс-олимпиадник.
Вам надо проверять, что вернет fscanf. Если оно у вас вернет что-то меньшее 2, то значит оно не смогло прочитать обе строки. В этом случае надо выходить из цикла и не класть новую запись в таблицу
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы