天天看點

【知識小貼士3】cin 與 cin.getline()函數同時使用時的一個疑問

問題

前面我們說過,cin在接收字元串時不能接收含有空格的字元串,是以我們使用cin.getline()函數。但是當如果在cin.getline()函數前面用到cin,你會發現出問題了!!!!,如下:

#include <iostream>
using namespace std;
int main()
{
    int a;
    char ch[100];
    cin>>a;
    cin.getline(ch,100,'\n');
    cout<<a<<endl;
    cout<<ch;
}
           

你會發現,給整形變量a指派後 按 return 鍵後,并沒有讓你接着輸入字元串ch的值!

這是什麼原因呢?原來當你給整形變量a指派後 按 return 鍵後,字元串ch把換行符當作輸入的值了吸收了,ch中就接收了一個'\n'。當你給整形變量a指派後 按空格鍵就沒有這個問題。

解決

解決方法很簡單,隻要在cin.getline()前面吃掉cin輸入時留下的'\n'(如果是按空格輸入結束,也不影響)。我們一般用getchar()函數去吃掉那個'\n',參考代碼如下:

#include <iostream>
using namespace std;
int main()
{
    int a;
    char ch[100];
    cin>>a;
    char x = getchar();
    cin.getline(ch,100,'\n');
    cout<<a<<endl;
    cout<<ch;
}
           

—<完>—

繼續閱讀