2016-06-13 56 views
0

我製作了一臺「電腦」。我conctructor看起來是這樣的:會員功能不會執行其整個代碼

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(); 
    } 
} 

然後,如果你按y鍵,你將被髮送到下一個步驟是函數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循環來獲取y,changeName();不會工作,但如果我刪除,changeName函數工作得很好,它需要我的輸入就好了。

的changeName()的代碼看起來是這樣的:

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

我已經使用Visual Studio的調試器,看看爲什麼我不會正確地調用它嘗試過,但可惜沒有希望。 奇怪的是,如果構造函數中的while循環不存在,該函數可以正常工作。

+1

可能的複製來完成:爲什麼標準::函數getline()格式化提取後跳過輸入?](HTTP: //stackoverflow.com/questions/21567291/why-does-stdgetline-skip-input-after-a-formatted-extraction) – NathanOliver

回答

0

這是因爲在getline(cin, _name)中,當您輸入enter時,它總是輸入「/ n」字符。

要糾正它,把一個getchar();

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

你需要調用changeName()前沖洗cin,這可以通過使用

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