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

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

Войти
Регистрация
Восстановить пароль
 
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
#1

Как проигнорировать последовательность символов в std::cin? - C++

03.03.2014, 10:15. Просмотров 479. Ответов 12
Метки нет (Все метки)

Есть два числа, разделенных последовательностью "--:". Если бы это делалось при помощи sscanf:
C++
1
sscanf(input, "%d--:-%d", &a, &b);
Однако std::cin не позволяет такого:
C++
1
std::cin >> a >> "--:-" >> b;
Как же это сделать с std::cin / std::fstream?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.03.2014, 10:15
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как проигнорировать последовательность символов в std::cin? (C++):

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

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

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

Как std::cin считает CTRL + C? - C++
Есть код. #include <string> #include <iostream> #include <exception> #include <limits> int main(int argc, char* argv ) { ...

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

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

12
dzrkot
zzzZZZ...
519 / 349 / 53
Регистрация: 11.09.2013
Сообщений: 2,004
03.03.2014, 10:30 #2
что мешает просто записать в это в строку и передать в поток уже строку содержащую 2 числа и разделитесь??
0
Кудаив
329 / 406 / 24
Регистрация: 27.05.2012
Сообщений: 1,168
Завершенные тесты: 2
03.03.2014, 12:19 #3
nexen, вообще ignore
dzrkot,
Цитата Сообщение от dzrkot Посмотреть сообщение
что мешает просто записать в это в строку и передать в поток уже строку содержащую 2 числа и разделитесь
а потом парсить? нафига вешать на кого то задачу с которой спокойно справится std::cin
0
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
03.03.2014, 13:42  [ТС] #4
Кудаив, так а как "справится std::cin" то?
0
Alex5
1072 / 736 / 114
Регистрация: 12.04.2010
Сообщений: 1,883
03.03.2014, 13:54 #5
Цитата Сообщение от nexen Посмотреть сообщение
Однако std::cin не позволяет такого:
C++
1
std::cin >> a >> "--:-" >> b;
Можно так.
C++
1
2
3
std::cin >> a;
std::cin.ignore( 4 );
std::cin >> b;
1
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
03.03.2014, 15:12  [ТС] #6
Alex5, у меня такое решение не проходит, после "cin >> a" происходит cin.fail()
0
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
03.03.2014, 15:18 #7
Цитата Сообщение от nexen Посмотреть сообщение
после "cin >> a" происходит cin.fail()
Если между числами четыре символа, не должно.
1
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
03.03.2014, 21:16  [ТС] #8
alsav22, входная строка в файле такая:
"4--:-17"
C++
1
2
3
4
5
fstream in;
//...
in >> integerA; //in.fail() == true
in.ignore(4);
in >> integerB;
0
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
03.03.2014, 21:18 #9
И что? В integerB не 17?
1
Петррр
5965 / 3402 / 337
Регистрация: 28.10.2010
Сообщений: 5,926
03.03.2014, 21:22 #10
nexen, опытным путем
1
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
04.03.2014, 08:58  [ТС] #11
Петррр, и всё равно не работает.
Ладно, а что насчет считывания пробелом из входного потока при помощи fstream/cin?
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
using namespace std;
 
int main() {
    char x, y, z;
    cin >> x >> y >> z;
    cout << "x:" <<  x << "\ny:" <<  y << "\nz:" << z << endl << "works?";
    return 0;
}
Вход :
"4 b"
Пробелы просто игнорируются, хотя считывается char
0
Alex5
1072 / 736 / 114
Регистрация: 12.04.2010
Сообщений: 1,883
04.03.2014, 12:06 #12
Цитата Сообщение от nexen Посмотреть сообщение
Пробелы просто игнорируются, хотя считывается char
Чтобы не игнорировать пробелы, можно написать
C++
1
2
    char x, y;
    cin >> noskipws >> x >> y; /* не пропускать пробелы */
Или можно использовать функцию get() :
C++
1
2
3
    char x, y;
    x = cin.get();
    y = cin.get();
1
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
04.03.2014, 15:44 #13
Цитата Сообщение от nexen Посмотреть сообщение
и всё равно не работает.
Что конкретно не работает? На вопрос не ответили(9 пост). Всё работает. Если у вас не работает, значит не так что-то делаете.

Добавлено через 2 минуты
Цитата Сообщение от nexen Посмотреть сообщение
Вход :
"4 b"
Пробелы просто игнорируются, хотя считывается char
Может откроете секрет, что нужно сделать?
0
04.03.2014, 15:44
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.03.2014, 15:44
Привет! Вот еще темы с ответами:

std::cin, eof не всегда принимается как признак конца файла - C++
std::string text; char ch = 0; while(!std::cin.get(ch).eof()){ text.append(1, ch); } Ввожу в консоль в Windows: &quot;^Z&quot;...

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

Как можно считывать из строки (std::string или char*) данные при помощи cin - C++
Как можно считывать из строки (std::string или char*) данные при помощи cin (или может есть какой-нибудь поток-обертка?), как sscanf из...

Как узнать, что есть данные для ввода, которые можно забрать std::cin - C++
Всем здравствуйте! У меня есть параллельный поток, в котором нужно собирать данные с помощью std::cin. Но чтобы произвести эту...


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

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

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