2016-06-13 5 views
0

Я сделал «компьютер». Моя conctructor выглядит следующим образом:Member function не выполняет весь код

PC::PC() 
{ 
    cout << "Would you like to turn the pc on? type y for yes." << endl; 
    a = getchar(); 

    while (a != 'y') 
    { 
     cout << "If you dont turn it on, then nothing will happen. Loser." << endl; 
     a = getchar(); 
    } 
} 

Затем, если нажать у вас будет отправлен к следующему шагу, который является функцией PC :: PCON, который выглядит следующим образом:

void PC::pcOn() 
{ 
    for (auto i = 0; i < 3; i++) 
    { 
     cout << "----------------------------------------" << endl; 
    } 
    cout << "--------- What is your name? -----------" << endl; 
    changeName(); 
    for (auto i = 0; i < 3; i++) 
    { 
     cout << "----------------------------------------" << endl; 
    } 

    for (auto i = 0; i < 5; i++) 
    { 
     cout << "**" << endl; 
     Sleep(100); 
    } 
    cout << "Welcome " << name << " to the future of computing." << endl << endl; 
    cout << "This computer program can do a lot of things for you" << endl << "it is a good calculator, try to type \"calculater\"" << endl; 
} 

Однако, когда я есть цикл while в contructor, чтобы заставить y идти, changeName(); wont work, но если я удалю это, функция changeName работает просто отлично, и он принимает мои данные только отлично.

Код для changeName() выглядит следующим образом:

void PC::changeName() 
{ 
    string _name; 
    getline(cin, _name); 
    name = _name; 
} 

Я попытался с помощью отладчика в Visual Studio, чтобы понять, почему я не буду называть его правильно, но увы нет надежды. Странно, что функция работает нормально, если цикл while в конструкторе отсутствует.

+1

Возможный дубликат: [Почему STD :: GetLine() пропустить ввод после отформатированный извлечения?] (HTTP: //stackoverflow.com/questions/21567291/why-does-stdgetline-skip-input-after-a-formatted-extraction) – NathanOliver

ответ

0

Это потому, что в getline(cin, _name) он всегда вводит символ «/ n», когда он вводится при вводе ввода.

Чтобы исправить это, установите getchar();

void PC::changeName() 
{ 
    string _name; 
    getchar(); 
    getline(cin, _name); 
    name = _name; 
} 
0

Вам нужно промывать cin перед вызовом changeName(), это может быть сделано с помощью

int c; 
while ((c = getchar()) != '\n' && c != EOF);