用户只需在c ++中输入即可获得输出

时间:2015-09-26 21:13:45

标签: c++ coordinates enter

我正在尝试构建一个简单的代码,在您输入一些方向后,它会给出二维坐标。 问题是当用户按下回车时我不知道如何给出正确的输出。这应该是(0,0)因为如果用户只是按下输入就意味着他没有改变坐标。我怎么知道用户是否刚按了回车并相应地输出了正确的输出?

这是我所做的代码:

#include <iostream>
using namespace std;

int main ()
{
    int a = 0, b = 0;
    string direction;

if( cin >> direction) {
    if( !direction.empty() ) {
        // handle input correctly
        // Interpret directions
        for (int i = 0; i < direction.length(); i++) {
            if (direction[i] == 'e') a++;
            else if (direction[i] == 's') b++;
            else if (direction[i] == 'w') a--;
            else if (direction[i] == 'n') b--;
        }
    }
    else if (direction.empty()) cout << "(0,0)" << endl;
}

// Output coordinates
cout << "(" << a << "," << b << ")" << endl;
}

2 个答案:

答案 0 :(得分:1)

操作cin >> direction;忽略空格和空行。这里字符串direction不是空的空格终止字。

可以使用std::getline读取整行。此函数从流中读取行,并且还读取空行。

所以,解决方案:

int a = 0, b = 0;
string direction;

getline(cin, direction);

if(!direction.empty()) {
    // Interpret directions
    for (int i = 0; i < direction.length(); i++) {
        if (direction[i] == 'e') a++;
        else if (direction[i] == 's') b++;
        else if (direction[i] == 'w') a--;
        else if (direction[i] == 'n') b--;
    }
}
// else is not needed, since here a = 0 and b = 0.

// Output coordinates
cout << "(" << a << "," << b << ")" << endl;

答案 1 :(得分:0)

你需要做的是围绕你的输入尝试包裹if,然后如果成功,检查输入的字符串是否为空。如果它是空的,你知道用户按下了enter而没有给出任何其他输入。代码类似于:

if( cin >> input) {
    if( !input.empty() ) {
       // handle input correctly
    }
}

如果你想知道它为什么这样做,请在&#34; C ++超级常见问题解答&#34;在isocpp.org