Форум программистов, компьютерный форум CyberForum.ru

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

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

Показать сообщение отдельно
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
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++ и зачем называть переменные транслитом.
 
Текущее время: 14:38. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru