Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / cin и ввод с консоли / 23 сообщений из 23, страница 1 из 1
04.10.2007, 23:47:29
    #34848190
cin :-\
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cin и ввод с консоли
Подскажите, почему не работает конструкция вида
Код: plaintext
1.
2.
3.
4.
5.
6.
int n;
string s;
// С консоли ввожу 123\nQWERTY\n
cin>>n;
getline(cin,s); // Здесь получаем всегда пустую строку
getline(cin,s); // QWERTY попадает сюда.

и как с этим правильно бороться?
Все пускаю на VS2008 beta 2.
...
Рейтинг: 0 / 0
05.10.2007, 04:29:01
    #34848297
ErV
ErV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cin и ввод с консоли
cin :-\ wrote:

> и как с этим правильно бороться?
А если 123 и qwerty через пробел вводить, то что?
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
05.10.2007, 08:52:22
    #34848459
blinded
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cin и ввод с консоли
CR LF за два разных символа принимают, ну мелко мягкие руки у них
...
Рейтинг: 0 / 0
05.10.2007, 10:07:32
    #34848626
cin :-\
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cin и ввод с консоли
ErVА если 123 и qwerty через пробел вводить, то что?
Если через пробел, то QWERTY выбирается первым getline'м.
Сейчас проверил - поведение у VS2005SP1 такое же.
...
Рейтинг: 0 / 0
05.10.2007, 10:10:44
    #34848645
cin :-\
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cin и ввод с консоли
blindedCR LF за два разных символа принимают, ну мелко мягкие руки у нихНет, если дальше написать еще один getline, то он работает уже правильно.
...
Рейтинг: 0 / 0
05.10.2007, 10:11:46
    #34848647
cin :-\
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cin и ввод с консоли
Похоже на то, что оператор >> у cin как-то не так обрабатывает перевод строки.
...
Рейтинг: 0 / 0
05.10.2007, 10:13:08
    #34848654
cin :-\
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cin и ввод с консоли
Интересует вопрос - на других компиляторах у кого и как такая конструкция работает?
...
Рейтинг: 0 / 0
05.10.2007, 10:15:54
    #34848664
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cin и ввод с консоли
cin :-\Интересует вопрос - на других компиляторах у кого и как такая конструкция работает?

Сто пудовово под линухом будет работать как часы.
...
Рейтинг: 0 / 0
05.10.2007, 10:18:06
    #34848676
cin :-\
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cin и ввод с консоли
AkhСто пудовово под линухом будет работать как часы.
"Будет" не очень интересно. Интересует именно "работает" или "не работает".
...
Рейтинг: 0 / 0
05.10.2007, 10:18:33
    #34848678
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cin и ввод с консоли
cin :-\ AkhСто пудовово под линухом будет работать как часы.
"Будет" не очень интересно. Интересует именно "работает" или "не работает".

работает - так сойдет?
...
Рейтинг: 0 / 0
05.10.2007, 10:28:09
    #34848730
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cin и ввод с консоли
Сорри наврал. Похоже cin>>n; перевод строки не съедает
...
Рейтинг: 0 / 0
05.10.2007, 10:34:04
    #34848749
cin :-\
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cin и ввод с консоли
AkhСорри наврал. Похоже cin>>n; перевод строки не съедаетИнтересно тогда, почему
Код: plaintext
1.
2.
3.
int n, k;
cin>>n;
cin>>k;
работает правильно?
...
Рейтинг: 0 / 0
05.10.2007, 10:35:35
    #34848754
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cin и ввод с консоли
cin :-\ AkhСорри наврал. Похоже cin>>n; перевод строки не съедаетИнтересно тогда, почему
Код: plaintext
1.
2.
3.
int n, k;
cin>>n;
cin>>k;
работает правильно?

Вообщем не надо смешевать оператор >> и getline. Замени в начальном примере.
...
Рейтинг: 0 / 0
05.10.2007, 10:36:35
    #34848761
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cin и ввод с консоли
Похоже на ту же историю, что категорически не рекомендуется смешивать stdio и iostream
...
Рейтинг: 0 / 0
05.10.2007, 10:59:13
    #34848852
cin :-)
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cin и ввод с консоли
AkhВообщем не надо смешевать оператор >> и getline. Замени в начальном примере.
Вот нашел описание проблемы:
http://www.augustcouncil.com/~tgibson/tutorial/iotips.html
Хотелось бы сделать все через >>, но он пробелы считает разделителем и всю строку не дает вычитать.
...
Рейтинг: 0 / 0
05.10.2007, 11:04:24
    #34848883
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cin и ввод с консоли
cin :-) AkhВообщем не надо смешевать оператор >> и getline. Замени в начальном примере.
Вот нашел описание проблемы:
http://www.augustcouncil.com/~tgibson/tutorial/iotips.html
Хотелось бы сделать все через >>, но он пробелы считает разделителем и всю строку не дает вычитать.

Читай getline-ами и нужные строчки конверти в числа.

ПС: точно не знаю, но можно поискать: может в iostream можно указывать разделители...
...
Рейтинг: 0 / 0
05.10.2007, 11:36:28
    #34849030
blinded
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cin и ввод с консоли
А я вот разобрался
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
# include <iostream>
# include <iomanip>
# include <string>

using namespace std;
int main(int argc, const char* const* argv)
{
  int i;
  string str;
  int c;
  ios::fmtflags f = cin.flags();
  if (argc ==  1   || argv[ 1 ][ 0 ] == '1' )
  {
    cin >> i; // после чтения позиция потока на \n
    c = cin.get();  // можете убедиться
    cin.unget();    // вернул в поток
    cin >> str;     // прочитал, но т. к. символ \n разделитель он в строку не попал
    cout << i << endl;
    cout << hex << c << endl;
    cout << str << endl;
  }
  else if (argc ==  2  && argv[ 1 ][ 0 ] == '2')
  {
    cin >> i; // после чтения позиция потока на \n
    c = cin.get(); 
    cin.unget();
    cout << i << endl;
    cout << hex << c << endl;
    getline(cin, str); // прочитал все от позиции в буфере до \n . те пустую строку
    cout << str << endl;      
    cout << str.length() << endl; // строка пуста!!!
    getline(cin, str);
    cout << str << endl;
  }
}

Работает везде вроде одинаково, Так что обвинения в сторону M$ cнимаются
...
Рейтинг: 0 / 0
05.10.2007, 11:44:50
    #34849067
cin :-)
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cin и ввод с консоли
Переписал с использованием getline и strtol - все работает как часы. Спасибо всем за обсуждение.
...
Рейтинг: 0 / 0
05.10.2007, 12:42:33
    #34849394
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cin и ввод с консоли
Akh пишет:
> Похоже на ту же историю, что категорически не рекомендуется смешивать
> stdio и iostream


Где это ты там увидал stdio ?
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
05.10.2007, 12:48:48
    #34849431
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cin и ввод с консоли
MasterZiv
Akh пишет:
> Похоже на ту же историю, что категорически не рекомендуется смешивать
> stdio и iostream


Где это ты там увидал stdio ?
Posted via ActualForum NNTP Server 1.4

При чем здесь "увидел"?
...
Рейтинг: 0 / 0
05.10.2007, 16:32:49
    #34850563
ErV
ErV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cin и ввод с консоли
cin :-\ wrote:

> Интересует вопрос - на других компиляторах у кого и как такая
> конструкция работает?
g++ на GNU/Linux - ведет себя точно так же.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
#include <iostream>
using namespace std;

int main (int argc, char** argv){
    int n;
    string s;
    // С консоли ввожу 123\nQWERTY\n
    cin>>n;
    cout << "n: " << n << endl;
    getline(cin,s); // Здесь получаем всегда пустую строку
    cout << "next string: " << s << endl;
    getline(cin,s); // QWERTY попадает сюда.
    cout << "next string: " << s << endl;
    return  0 ;
}

вывод:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
bash- 3 . 1 $ ./a.out
 123 
n:  123 
next string:
qwert
next string: qwert
bash- 3 . 1 $ ./a.out
 123  qwert
n:  123 
next string:  qwert

next string:
bash- 3 . 1 $          
Очевидно, поведение стандартное, и CR/LF тут ни при чем.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
05.10.2007, 16:49:06
    #34850674
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cin и ввод с консоли
ErV

Закон сохранения чтения: Если Мастер Зив начал читать топики целиком, то ЕрВ теперь только начало. ;)
...
Рейтинг: 0 / 0
05.10.2007, 16:55:16
    #34850719
blinded
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cin и ввод с консоли
ErV
Очевидно, поведение стандартное, и CR/LF тут ни при чем.
Posted via ActualForum NNTP Server 1.4
Ну так я же принес свои извенения. Я тоже на обоих пробовал
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / cin и ввод с консоли / 23 сообщений из 23, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]