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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
qazc
0 / 0 / 1
Регистрация: 01.11.2011
Сообщений: 26
#1

Последний элемент из файла выводится 2 раза - C++

08.09.2013, 20:33. Просмотров 1315. Ответов 14
Метки нет (Все метки)

Добрый вечер. Подскажите, пожалуйста, почему при чтении из файла последний элемент выводиться 2 раза? Если в файле такие данные: "string1 string2 string3", то в результате получится "string1string2string3string3".

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <fstream>
#include <string>
 
int main() {
 
std::string str;
std::string result;
 
std::ifstream fromFile("test.txt");
 
if(!fromFile)
    std::cout << "Error";
 
while(!fromFile.eof()) {
    fromFile >> str;
    result+=str;
}
 
std::cout << result;
 
return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.09.2013, 20:33
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Последний элемент из файла выводится 2 раза (C++):

Почему при чтении файла последний символ выводится 2 раза? - C++
если структура файла: 1\nEOF. То почему не выполняется условие if(Ch != '\n') { cout.put(Ch); } и программа выводит в...

Выводится только последний элемент массива - C++
Здравствуйте. Имеется текстовый файл text.txt , где есть 4 строки разной длины. Я в своей программе определяю, что там 4 строки, ищу кол-во...

Выводится только последний элемент очереди, а нужно вывести все - C++
Ничего понять не могу. Заполняю очередь, затем вывожу, а выводится лишь последний элемент. Например, если ввожу 1 2 3 4 5, то выводится...

Почему на экран выводится 5 элементов массива, а в файл записывается 1 элемент (последний) - C++
#include &lt;iostream&gt; #include &lt;cstdlib&gt; #include &lt;ctime&gt; #include &lt;fstream&gt; using namespace std; int main() { int...

При считывании из файла последний элемент читается дважды - C++
Всем доброго времени суток! Нашёл граблю. Считываю из файла слова, разделённые пробелами, в vector&lt;string&gt;. Для куска кода, которые...

Первый отрицательный и последний положительный элемент читаемый из файла - C++
Из файла (имя файла вводится с клавиатуры) считывается массив целых чисел. Размер массива заранее неизвестен. Выведите в файл количество...

14
Nullik
43 / 12 / 1
Регистрация: 13.03.2013
Сообщений: 300
Завершенные тесты: 1
08.09.2013, 20:37 #2
а в файле запись в строчку или в столбец?
0
qazc
0 / 0 / 1
Регистрация: 01.11.2011
Сообщений: 26
08.09.2013, 20:39  [ТС] #3
В строку, но записаны через пробел.
0
Nullik
43 / 12 / 1
Регистрация: 13.03.2013
Сообщений: 300
Завершенные тесты: 1
08.09.2013, 20:44 #4
qazc, я записала в столбец -- всё отлично считал.

Добавлено через 1 минуту
лол, когда в строчку записала, так же вывод сделал. Корректно, в смысле.
значит проблема только у тебя.
0
qazc
0 / 0 / 1
Регистрация: 01.11.2011
Сообщений: 26
08.09.2013, 20:46  [ТС] #5
Я записал в столбец и ничего не поменялось... По прежнему выводит последний элемент 2 раза.
0
zer0mail
2399 / 2032 / 202
Регистрация: 03.07.2012
Сообщений: 7,373
Записей в блоге: 1
08.09.2013, 20:48 #6
Наверное, в файле есть еще пустая строка после string3
0
qazc
0 / 0 / 1
Регистрация: 01.11.2011
Сообщений: 26
08.09.2013, 20:49  [ТС] #7
Все ок, проблема была в одном пробеле, который стоял после последнего элемента. Всем спасибо.
0
Nullik
43 / 12 / 1
Регистрация: 13.03.2013
Сообщений: 300
Завершенные тесты: 1
08.09.2013, 20:49 #8
попробуй запустить программу через точки останова, в то время просматривая локальные переменные и что находится в result. Может там чего появится нового.
0
maksqwe
4 / 3 / 1
Регистрация: 29.03.2012
Сообщений: 11
08.09.2013, 20:50 #9
Цитата Сообщение от Nullik Посмотреть сообщение
лол, когда в строчку записала, так же вывод сделал. Корректно, в смысле.
значит проблема только у тебя.
Проблемы тут не "у тебя" а в формате файла который считывает, если в конце строки стоит перевод на другую строку или пробел то будет в конце дублирование, не будет перевода - не будет дублирования. Проверьте
0
Nullik
43 / 12 / 1
Регистрация: 13.03.2013
Сообщений: 300
Завершенные тесты: 1
08.09.2013, 20:53 #10
maksqwe, но проблема то была ведь у него
И даже если бы прогу прокрутил бы через точки -- нашёл бы проблему.

Не по теме:

*ахаха, лол, забавно, ахаха, интересно, почему так "не продуманно" в файлах?

0
maksqwe
4 / 3 / 1
Регистрация: 29.03.2012
Сообщений: 11
08.09.2013, 21:03 #11
Цитата Сообщение от Nullik Посмотреть сообщение
И даже если бы прогу прокрутил бы через точки -- нашёл бы проблему.
Это да

Кстати, почему так не продумано, так как бывают разные файлы и данные в том числе с разными разделителями в конце, unix/win etc.. например '/n' '/r', '/0'
1
zer0mail
2399 / 2032 / 202
Регистрация: 03.07.2012
Сообщений: 7,373
Записей в блоге: 1
08.09.2013, 21:18 #12
Кто мешает написать программу так, чтобы все эти ситуации корректно отрабатывались?
ТС сначала проверяет на eof, а потом читает и обрабатывает
0
qazc
0 / 0 / 1
Регистрация: 01.11.2011
Сообщений: 26
08.09.2013, 21:23  [ТС] #13
А для чего последний элемент дублируется? От этого есть какие-то плюсы?
0
zer0mail
2399 / 2032 / 202
Регистрация: 03.07.2012
Сообщений: 7,373
Записей в блоге: 1
08.09.2013, 21:28 #14
Цитата Сообщение от qazc Посмотреть сообщение
А для чего последний элемент дублируется? От этого есть какие-то плюсы?
Тебе виднее
0
Nullik
43 / 12 / 1
Регистрация: 13.03.2013
Сообщений: 300
Завершенные тесты: 1
08.09.2013, 21:33 #15
qazc, у тебя он копируется, как я поняла, в том случае, потому что есть:

C++
1
2
fromFile >> str;
    result+=str;
но там не конец файла из-за лишнего проблема или абзаца.
Вероятно так.
0
08.09.2013, 21:33
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.09.2013, 21:33
Привет! Вот еще темы с ответами:

При чтении файла последний элемент повторяется дважды - C++
появилась необходимость выучить работу с файлами за 9 часов #include &lt;iostream&gt; #include &lt;time.h&gt; #include &lt;stdio.h&gt; #include...

Ввод матрицы из файла - затирает последний элемент предыдущей строки - C++
Странный эффект Содержимое вводимого файла- 1 2 3 4 5 6 int *a; a = new(2*3); for (i=0;i&lt;2;i++) for...

Вывести содержимое списка в следующем порядке: первый элемент, последний элемент, второй элемент, предпоследни - C++
#include &lt;iostream&gt; #include &lt;list&gt; #include &lt;iterator&gt; void output(std::list&lt;int&gt; myList, std::list&lt;int&gt;::iterator iter1,...

Строки. Как найти в слове первый элемент? Второй элемент, последний элемент? - C++
как найти в слове первый элемент?Второй элемент,последний элемент.С помощью каких операторов это делается??


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru