0

输入小数后有没有办法删除尾随空格?例如:

10        A

我想在空格结束后捕捉第一个字符。(必须是 \n 才能为真。如果不是,则为假

到目前为止我的尝试:

cout << "Please enter a number: ";
cin >> n;

if (cin.peek() == ' ')
    //Something to catch the whitespaces

if(cin.fail() || cin.peek() != '\n')
    cout << "Not a number." << endl;

else
    cout << "A number." << endl;

可以通过 istream 中的函数来做到这一点吗?

(我知道 cin.fail 可以做好事,但它仍然不认为输入 10A 为失败)

4

3 回答 3

1

正如@chris 所说,您真的想从阅读整行开始,然后从那里进行其余的阅读。

std::string line;
std::getline(cin, line);

std::stringstream buffer(line);

buffer >> n;

char ch;
if (buffer >> ch) 
    cout << "Not a number";
于 2013-03-28T04:34:05.310 回答
1

我对您的尝试感到有些困惑。你是说你试图避免空白?

cin 跳过那些......它是一个有效的空白分隔符,如制表符或换行符。如果你这样做:

int A(0), B(0);

std::cin >> A >> B;

输入的数字将进入 A,直到您输入空格,然后它们将进入 B。

如果您正在使用字符串并希望将它们连接成一个没有空格的字符串;

std::string A, B, C;
std::string final;

std::cin >> A >> B >> C;

std::stringstream ss;
ss << A << B << C;
final = ss.str();

但是,就像 Jerry 提到的那样,如果您处理字符串,您可以只执行 std::getline() ,这可能会减少您的头痛。

于 2013-03-28T05:17:18.890 回答
0

谢谢你的帮助。使用字符串确实很容易,是的。虽然不允许使用它。

可以通过这个简单的方法来完成:

cout << "Please enter a number: ";
cin >> n;

while (cin.peek() == ' ')
   cin.ignore(1,' ');

if(cin.fail() || cin.peek() != '\n')
   cout << "Not a number." << endl;

else
   cout << "A number." << endl;
于 2013-04-01T10:00:49.343 回答