Вопросы по cin

 
0
 
C++
ava
EgoBrain | 04.10.2013, 03:40
Сразу же прошу тысячу извинений за эту тему, но всё же решился таки создать.


#include <iostream>

using namespace std;

void main()
{
    int a, b;    

    cout<<"Enter two numbers: "<<endl;
    cout<<"First = "; 
    cin>>a;
    cout<<"Second = "; 
    cin>>b;

    cout<<endl<<"a = "<<a<<endl<<"b = "<<b<<endl;

    system("pause");

    main();
}


Почему при вводе символа "a"  получает какой-то мусор, а "b" вообще не требуется вводить ей тот же мусор передается автоматически. И это "автоматическое" извлечение из ввода в переменые происходит при каждом последующем вызове main. Что вообще происходит?

З.Ы. Не ругайте за рекурсию main, это не приципиально для вопроса.

Правильно ли что оператор ">>" cin-а выполняется до тех пор, пока не будет извлечена вся строка (сколько символов ввел, столько раз они и выполнился)?
Comments (3)
ava
xvr | 04.10.2013, 15:16 #
Оператор >> вводит тот тип, переменная которого стоит справа. Если у вас значение в потоке не то (а 'a' это явно 'не то' для переменной типа Int), то в переменную ничего не вводится (она не изменяется), из потока ничего не удаляется, а для самого потока взводится признак ошибки (.bad() или .fail() - не помню). Дальнейшие попытки что либо ввести из такого потока будут игнорироваться, пока ему не сбросят признак ошибки (cin.clear())
ava
EgoBrain | 05.10.2013, 00:38 #
Цитата (xvr @  4.10.2013,  15:16 findReferencedText)
Дальнейшие попытки что либо ввести из такого потока будут игнорироваться, пока ему не сбросят признак ошибки (cin.clear())

Тогда почему программа продолжает выполнятся так, как буд-то ввод происходит всё время? Ведь рекурсия зацикливается... Согласен с предыдущими утверждениями, по крайней мере поведение программы им соответствует.
ava
xvr | 05.10.2013, 10:53 #
Цитата (EgoBrain @  5.10.2013,  00:38 findReferencedText)
Тогда почему программа продолжает выполнятся так, как буд-то ввод происходит всё время? 

Он не происходит - он игнорируется. Пока поток находится в состоянии ошибки все >> из него будут немедленно возвращаться, ничего ниоткуда не прочитав и не присвоив никаких переменных

Please register or login to write.
Firm of day
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Contributors
  xvr   EgoBrain
advanced
Submit