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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.73
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
#1

std::cin, eof не всегда принимается как признак конца файла - C++

16.09.2012, 13:32. Просмотров 1485. Ответов 4
Метки нет (Все метки)

C++
1
2
3
4
5
std::string text;
    char ch = 0;
    while(!std::cin.get(ch).eof()){
        text.append(1, ch);
    }
Ввожу в консоль в Windows:
"^Z" (ctrl-z) ok, из цикла выходит
"g\n^Z" (\n - новая строка) ok, из цикла выходит.
"g^Z" из цикла не выходит.

Как устанавливать признак конца файла в консоли, чтобы всегда работало или как исправить код выше?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.09.2012, 13:32     std::cin, eof не всегда принимается как признак конца файла
Посмотрите здесь:
C++ признак конца файла
C++ Visual Studio 2015 признак конца файла
cin.eof и cin.fail C++
C++ Как выполнять std::cin в LOOP ?
Как исправить ошибку с std::cin C++
C++ Не работает std::cout || std::cin
C++ Как заставить std::cin распознавать префиксы?
C++ Как проигнорировать последовательность символов в std::cin?
Eof не находит конца C++
Как узнать, что есть данные для ввода, которые можно забрать std::cin C++
C++ Почему при использовании getline( std::cin, str ) строка считывается не так, как ожидается?
Как можно считывать из строки (std::string или char*) данные при помощи cin C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
grizlik78
Эксперт С++
1903 / 1435 / 109
Регистрация: 29.05.2011
Сообщений: 2,990
16.09.2012, 14:06     std::cin, eof не всегда принимается как признак конца файла #2
Боюсь, что это особенность Windows, что ^Z воспринимается только в начале строки.
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
16.09.2012, 14:11  [ТС]     std::cin, eof не всегда принимается как признак конца файла #3
Туплю( Забываю пользоваться поиском. С первого же раза нашел в гугле как это сделать.
grizlik78
Эксперт С++
1903 / 1435 / 109
Регистрация: 29.05.2011
Сообщений: 2,990
16.09.2012, 14:16     std::cin, eof не всегда принимается как признак конца файла #4
Вообще, функциональность не должна измениться, если написать короче:
C++
1
2
3
4
5
    std::string text;
    char ch = 0;
    while(std::cin.get(ch)){
        text.append(1, ch);
    }
Кстати, в линуксе эта программа на ^D не в начале строки тоже реагирует не с первого раза. По первому нажатию ^D происходит чтение из буфера и обработка всех символов и только второе завершает ввод. Когда же ^D вводится в начале строки (то есть для пустого буфера), то ввод сразу завершается.
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
16.09.2012, 15:55  [ТС]     std::cin, eof не всегда принимается как признак конца файла #5
Сделал таким способом:
C++
1
2
3
4
5
6
7
// don't skip the whitespace while reading
    std::cin >> std::noskipws;
 
    // use stream iterators to copy the stream to a string
    std::istream_iterator<char> it(std::cin);
    std::istream_iterator<char> end;
    std::string result(it, end);
Yandex
Объявления
16.09.2012, 15:55     std::cin, eof не всегда принимается как признак конца файла
Ответ Создать тему
Опции темы

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