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

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

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

fstream и for - C++

15.05.2013, 23:42. Просмотров 885. Ответов 24
Метки нет (Все метки)

Здрасте.
Собственно, не могу понять, по какой причине не работает вот такой вот код, хотя по идее должен работать, или я ошибаюсь?

C++
1
2
3
4
...
std::ifstream file("somefile.txt");
for(char c=0; c!='@'; file >> c);
...
по идее я рассчитываю, что перебор символов в for из файла file окончится после того, как он наткнется на символ '@', но он продолжается бесконечно, что слегка удручает, хотя вот такой код вполне себе работает:

C++
1
2
3
4
5
6
7
8
9
10
...
std::ifstream file("somefile.txt");
while(true) 
{
    char c;
    file >> c;
    if(c == '@')
        break;
}
...
прошу подсказать, что здесь за нафиг происходит, спасибо.
работаю в visual studio 2010
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.05.2013, 23:42
Здравствуйте! Я подобрал для вас темы с ответами на вопрос fstream и for (C++):

fstream с++ - C++
Помогите пожалуйста... Как при считывании из файла считать переменные если они в файле находяться на разных строчках например надо...

fstream - C++
Дан текстовый файл. Осуществить посимвольную чередующуюся печать файла в прямом и обратном направлении в новый файл. Например, если в файле...

fstream - C++
помогите, пожалуйста, чет я совсем запуталась((( /*Дан текстовый фал, содержащий целые числа, разделенные пробелами. Определить...

fstream - C++
Всем доброго дня! Как с помощью библиотеки fstream вывести содержимое файла на экран??

<fstream> - C++
как читать из файла и записывать переменные написанные через пробел используя ifstream in(&quot;int.txt&quot;); ofstream...

из cstdio в fstream - C++
вод программа, написанная через функцию cstdio #include &quot;stdafx.h&quot; #include &lt;cstdio&gt; #include &lt;iostream&gt; #pragma warning(disable:...

24
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 831
15.05.2013, 23:49 #2
а чем так не устраивает?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <fstream>
 
using namespace std;
 
int main()
{
    fstream file("text.txt", ios::in);
    char c;
    while (file.good()) {
        c = file.get();
        cout << c;
    }
    file.close();
    return 0;
}
0
metaluga145
15.05.2013, 23:51
  #3

Не по теме:

Olivеr, вопрос не в том как сделать,а почему именно так,как написано, не работает

0
stima
485 / 337 / 38
Регистрация: 22.03.2011
Сообщений: 1,079
Завершенные тесты: 2
15.05.2013, 23:52 #4
И тот и тот код приводит к зацикливанию. Потому что в файле может не быть '@'.
2-й Вариант может иногда (смотря как звезды встанут) работать если переменная char c не будет проинициализирована ее значение возьмется из мусора и может совпасть с '@'.
0
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
15.05.2013, 23:59 #5
stima, но там с точно инициализирована.

Добавлено через 5 минут
markusblackmann, странно,но у меня работает!могу показать скрин.
0
stima
485 / 337 / 38
Регистрация: 22.03.2011
Сообщений: 1,079
Завершенные тесты: 2
16.05.2013, 00:01 #6
Цитата Сообщение от metaluga145 Посмотреть сообщение
stima, но там с точно инициализирована.
Согласен^^. Когда вы тестируете 2 вариант там нету '@'
0
markusblackmann
0 / 0 / 0
Регистрация: 26.04.2013
Сообщений: 5
16.05.2013, 00:03  [ТС] #7
Цитата Сообщение от stima Посмотреть сообщение
И тот и тот код приводит к зацикливанию. Потому что в файле может не быть '@'.
и первый пример кода, и второй пример кода запускался в одном и том же проекте, где был файл "somefile.txt", и во втором примере все отлично работало. следовательно, в файле есть символ '@'. И значение не берется из "мусора" только потому, что в первом примере переменная определена, если Вы посмотрите внимательней, а во втором нет смысла его определять.
0
stima
485 / 337 / 38
Регистрация: 22.03.2011
Сообщений: 1,079
Завершенные тесты: 2
16.05.2013, 00:06 #8
Тогда файл в студию. Магии нету. Есть просто закулисье. Или Вы привили не весь код, и та часто кода играете роль или в файле при тесте нету @.
0
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
16.05.2013, 00:06 #9
В общем, код рабочий. Попробуйте подебажить построчно, посмотреть что да как
0
markusblackmann
0 / 0 / 0
Регистрация: 26.04.2013
Сообщений: 5
16.05.2013, 00:14  [ТС] #10
Цитата Сообщение от metaluga145 Посмотреть сообщение
markusblackmann, странно,но у меня работает!могу показать скрин.
может это происки компилятора? Оо какой у Вас?

Добавлено через 3 минуты
Цитата Сообщение от stima Посмотреть сообщение
Тогда файл в студию. Магии нету. Есть просто закулисье. Или Вы привили не весь код, и та часто кода играете роль или в файле при тесте нету @.
файл в студию? та пожалуйста, любой текстовый файл, где присутствует хоть один символ @ сойдет =)
и весь код могу привести:
C++
1
2
3
4
5
6
7
8
#include <fstream>
 
void main()
{
  std::ifstream file("somefile.txt");
  for(char c=0; c!='@'; file >> c);
  file.close();
}
Добавлено через 4 минуты
вообщем, подвох таится в злых гремлинах, не иначе.
0
DU
1483 / 1129 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
16.05.2013, 00:15 #11
код работающий. бесконечного цикла нет.
есть вариант что файл не найден и file.good() == false с самого начала.
перед циклом проверку сделайте, файл точно открывается и в нем точно есть нужный символ?
0
stima
485 / 337 / 38
Регистрация: 22.03.2011
Сообщений: 1,079
Завершенные тесты: 2
16.05.2013, 00:15 #12
Еще раз. И тот и тот вариант уйдут на бесконечность если в файле НЕТУ '@'. А так варианты идентичны.
0
markusblackmann
0 / 0 / 0
Регистрация: 26.04.2013
Сообщений: 5
16.05.2013, 00:16  [ТС] #13
Цитата Сообщение от DU Посмотреть сообщение
код работающий. бесконечного цикла нет.
есть вариант что файл не найден и file.good() == false с самого начала.
перед циклом проверку сделайте, файл точно открывается и в нем точно есть нужный символ?
тогда бы не работал второй вариант, я думаю.
0
DU
1483 / 1129 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
16.05.2013, 00:26 #14
ну если они в одном и том же проекте - то пожалуй да. это все странно.
выводите на печать тогда, чтобы хоть что-то было видно что там читается.
у меня работает как надо, но вот глючок в дебагере студийном обнаружился:
C++
1
2
3
4
5
  char c = '!';
  std::ifstream file("x.txt");
  for(char c = 0; c != '@'; file >> c);
  std::cout << c << std::endl; // если тут навести мышкой на c, то показывается '@', хотя должно быть '!'
  file.close();
0
stima
485 / 337 / 38
Регистрация: 22.03.2011
Сообщений: 1,079
Завершенные тесты: 2
16.05.2013, 00:30 #15
2DU, деббагер прав. При итерации по циклу вы заместили переменную.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.05.2013, 00:30
Привет! Вот еще темы с ответами:

Из fstream в cstdio - C++
Всем привет. Стоит задача: Написать программу, которая считывает текст из файла и записывает в другой файл только те предложения, которые...

Write из fstream - C++
Здравствуйте!) Не могу понять, как пишет данные в файл функция write( То есть мы с помощью seekp указали позицию в потоке (файле) и...

Работа с fstream - C++
Здорова! Создал класс для записи и чтения файла через операцию , но почему то он работает не так как нужно. #include &lt;iostream&gt; ...

Fstream и malloc_assert - C++
Подскажите пожалуйста, а то уже голова болит. Есть программа которая предоставляет выбор алгоритма обработки. Данные она берет из файлов...


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

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
16.05.2013, 00:30
Ответ Создать тему
Опции темы

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