2016-01-13 50 views
1
#include <iostream> 
using namespace std; 

int a, b, c, d; 

void main() 
{ 
    cout << "Reading a" << endl; 
    cin.ignore(); 
// cin.clear(); 
    cin >> a; 

    cout << "Reading b" << endl; 
    cin.ignore(); 
// cin.clear(); 
    cin >> b; 

    cout << "Reading c" << endl; 
    cin.ignore(); 
// cin.clear(); 
    cin >> c; 

    cout << a << " " << b << " " << c << endl; 
    system("pause"); 
} 

我讀了3次變量從a到c。當我輸入隨機數然後接受它使用沒有空白(23,45,66)時它工作。但是,當我的輸入看起來像這樣23 45 66(中間的空格)時,它立即將23設置爲a,45b66c正確的方法來刷新cin輸入

我的意圖是讀取數字,以空格結束,然後忘記輸入的其餘部分並再次讀入下一個變量。

cin.ignore()cin.clear()似乎沒有幫助我,但可能我使用他們錯了。

我可以製作自己的緩衝區,然後檢查它是否有空白區域,但在做之前我想看看是否有其他方法。

+3

閱讀與函數getline一整行,然後執行字符串使用Stoi旅館 – mikedu95

+0

偉大工程,以整數的轉換並且實施起來非常快。謝謝。 –

回答

4

通過mikedu95在評論回答:

閱讀與getline一整行,然後使用stoi

#include <string> 
#include <iostream> 
using namespace std; 

string str; 
int a, b, c, d; 

void main() 
{ 
    cout << "Reading a" << endl; 
    getline(cin, str); 
    a = stoi(str); 

    cout << "Reading b" << endl; 
    getline(cin, str); 
    b = stoi(str); 

    cout << "Reading c" << endl; 
    getline(cin, str); 
    c = stoi(str); 

    cout << a << " " << b << " " << c << endl; 
    system("pause"); 
} 
3

你可以在這裏找到答案執行字符串到整數轉換: How does cin.clear() clear the input buffer?

我給這裏帶來了部分答案:

如果您需要從輸入緩衝區中刪除字符,您需要明確地執行此操作。例如,你可以使用

  • stream.ignore();無條件刪除下一個字符(如果有的話;如果沒有,則流將得到std::ios_base::eofbit集)。
  • stream.ignore(std::numeric_limits<std::streamsize>::max(), '\n');刪除所有字符,包括遇到的第一個'\n'字符。
  • 你可能想ignore()字符,而stream.peek()產生一個字符類,你不喜歡(例如,當isdigit(stream.peek())產量false