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

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

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

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

16.09.2012, 13:32. Просмотров 1705. Ответов 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" из цикла не выходит.

Как устанавливать признак конца файла в консоли, чтобы всегда работало или как исправить код выше?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.09.2012, 13:32
Здравствуйте! Я подобрал для вас темы с ответами на вопрос std::cin, eof не всегда принимается как признак конца файла (C++):

Не воспринимает ни std::cout, ни std::cin. Вобщем ничего из std. Также не понимает iostream - C++
Здравствуйте! Я хотел начать изучать язык C++. Набрал литературы. Установил Microsoft Visual C++ 2005 Express Edition. Образ диска...

Visual Studio 2015 признак конца файла - C++
Вот есть такой простейший кусок кода: int main() { vector<double> vec; double x; cout << "Введите числа: "; while (cin >> x)...

cin.eof и cin.fail - C++
Для чего они нужны и какая разница между ними; cin.eof и cin.fail Я так понимаю они(оба) принемают 2 значения типа bool=true and false

Как выполнять std::cin в LOOP ? - C++
Хочу сделать что то вроде командной строки. 1ый раз читает и выполняет нормально, но следующий раз вижу что ждет от меня ввода, но ни...

Как исправить ошибку с std::cin - C++
помогите у меня пропускает последующие вводы если вводишь знак или букву вот код std::cout<<"A: "; std::cin>>AA; ...

Не работает std::cout || std::cin - C++
#include "Account.h" #include <string> #include <iostream> using std::cout; Account :: Account(int startBalance) { ...

4
grizlik78
Эксперт С++
1956 / 1449 / 115
Регистрация: 29.05.2011
Сообщений: 3,008
16.09.2012, 14:06 #2
Боюсь, что это особенность Windows, что ^Z воспринимается только в начале строки.
1
Chelioss
180 / 180 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
16.09.2012, 14:11  [ТС] #3
Туплю( Забываю пользоваться поиском. С первого же раза нашел в гугле как это сделать.
0
grizlik78
Эксперт С++
1956 / 1449 / 115
Регистрация: 29.05.2011
Сообщений: 3,008
16.09.2012, 14:16 #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 вводится в начале строки (то есть для пустого буфера), то ввод сразу завершается.
1
Chelioss
180 / 180 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
16.09.2012, 15:55  [ТС] #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);
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.09.2012, 15:55
Привет! Вот еще темы с ответами:

Как проигнорировать последовательность символов в std::cin? - C++
Есть два числа, разделенных последовательностью &quot;--:&quot;. Если бы это делалось при помощи sscanf: sscanf(input, &quot;%d--:-%d&quot;, &amp;a, &amp;b); ...

Как заставить std::cin распознавать префиксы? - C++
Здравствуйте, народ. Вы не знаете как заставить cin распознавать префиксы? типо: Ввод: 10 Вывод(в десятичном виде): 10 Ввод: 010 ...

Eof не находит конца - C++
string GetFileLine(fstream &amp;file) { char *atextv = new char; file.get(atextv, 255, '\n'); file.get(); string textv(atextv); ...

Почему при использовании getline( std::cin, str ) строка считывается не так, как ожидается? - C++
Цель программы: При вводе строки, подсчитывает количество гласных букв. Проблема: При вводе количества строк, сразу выдает 0 букв, а...


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

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

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