Форум программистов, компьютерный форум, киберфорум
Наши страницы

Почему последнюю строку из файла выводит дважды? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Длинное имя файла изменить на короткое http://www.cyberforum.ru/cpp-beginners/thread636839.html
Доброго времени суток! Необходима помощь в написании программы. Суть: имеется файл с длинным именем,содержащий ххх-,далее последовательность 5 цифр. Необходимо переименовать файл в 'к_эти...
C++ Нахождение среднего арифметического и геометрического двух чисел Здравствуйте! Написал программу для нахождения среднего арифметического и геометрического двух чисел #include <stdio.h> #include <conio.h> #include <math.h> #include <stdlib.h> int main (void)... http://www.cyberforum.ru/cpp-beginners/thread636832.html
C++ const volatile
Пример из Шилдт Г. "С++ Базовый курс (3-е издание, 2010)" стр 205 const volatile unsigned char *port = (const volatile char *) 0x2112; Непонятно почему Шилд называет это константным...
Чтение данных из файла на примере программы C++
У меня есть программа которая с клавы осуществляет ввод данных об автомобилях и вывод марку машины с наивысшей скоростью. Вот этот код: #include <iostream> #include <conio.h> #include <cstdlib>...
C++ Вставка символа через каждые 8 букв http://www.cyberforum.ru/cpp-beginners/thread636665.html
Вообщем есть строка ввида "6842318465134824" мне надо её превратить в "68423184-65134824". Вот и вопрос как вставить после 8 цифры этот знак '-'? думал я думал вот что получилось. char...
C++ Не очевидное смещение к полям структуры Доброе время суток! Столкнулся с непонятным мне вопросом... у меня есть структура: struct A { uint16_t x; uint32_t y; } подробнее

Показать сообщение отдельно
Nameless One
Эксперт С++
5777 / 3427 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
13.08.2012, 08:27
Потому что неправильно составлена проверка на конец файла. Сначала прочитается и напечатается последняя строка, проверка условия while вернет истину, выполнится следующая итерация цикла, при которой наконец-то будет достигнут конец файла, а предыдущая строка будет напечатана без изменений.

Надо так:
C
1
2
3
4
5
6
7
8
while(fgets(stroka, 5, f) != NULL) /* fgets вернет NULL при конце файла или ошибке */
   printf("%s", stroka);
 
/* Как отличить конец файла от ошибки: */
if(ferror(f))
  /* обработка ошибки чтения */
else
  /* достигнут конец файла */
Непонятно правда, при чем здесь C++ и зачем называть переменные транслитом.
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.