2015-09-28 67 views
1
#include <iostream> 
using namespace std; 

int main() { 
    int x; 
    char y; 
    cin >> x; 
    while(!cin) 
    { 
     cout << "Error" << endl; 
     cout << "Enter x and y again => "; 
     cin.clear(); 
     cin.ignore(256,'\n'); 
     cin >> x; 
    } 
    cin >> y; 
    while (!(!isblank(y) && isalpha(y))) 
    { 
     cout << "You have entered wrong values try again!" << endl; 
     cout << "Enter x and y again => "; 
     cin >> x >> y; 
    } 
    return 0; 
} 

我试着处理,如果输入的输入是1 ax应该是一个数字y也应该是字母字符。它应该再次要求输入值xy。但是,它没有。它应该接受1a。如何克服这个问题?处理空格字符作为输入

+0

它适合我。如果我输入'1a','x'是'1','y'是'a'。 'operator >>'忽略了所有前面的空白区域。 – NathanOliver

+0

怎么样与空间字符'1 a'?在这种情况下,它应该再次请求输入@NathanOliver – snr

+0

如果空格有所作为,则应使用getline()读取整行(而不是使用cin),然后自己分析结果。 – FredK

回答

0

我会一次读取一行到缓冲区并使用stringstream从该缓冲区读取。下面是我的什么作品:

int x; 
char y; 
bool readin_successful = false; 
while (cin) { 
    cout << "Please enter x and y => "; 
    char z; 
    string buffer; 
    getline(cin, buffer); 
    stringstream bin(buffer); 
    bin >> x >> y; 
    bool const first_ok = (isalpha(y) and bin.good()); 
    bin >> z; 
    if (first_ok and not bin.good()) { 
     readin_successful = true; 
     break; 
    } 
    cout << "You have entered wrong values try again!" << endl; 
} 
cout << "Read: " << x << " " << y << " " << readin_successful << endl; 

它同时接受0 x0x,而不是别的什么(忽略空格)。 Here是我测试过的示例输入。

0

我找到了解决方案。 std::noskipws表示不跳过空格。

#include <iostream> 
using namespace std; 

int main() { 
    int x; 
    char y; 
    cin >> x; 
    while(!cin) 
    { 
     cout << "Error" << endl; 
     cout << "Enter x and y again => "; 
     cin.clear(); 
     cin.ignore(256,'\n'); 
     cin >> x; 
    } 
    cin >> noskipws >> y; 
    while (!(!isblank(y) && isalpha(y))) 
    { 
     cout << "You have entered wrong values try again!" << endl; 
     cout << "Enter x and y again => "; 
     cin.clear(); 
     cin.ignore(256,'\n'); 
     cin >> x >> y; 
    } 
    return 0; 
} 
相关问题