координаты — как получить вывод, когда пользователь просто нажимает ввод в переполнении стека

Я пытаюсь создать простой код, который дает координаты в двух измерениях после ввода направления.
Проблема в том, что я не знаю, как правильно выводить данные, когда пользователь просто нажимает клавишу ввода. Это должно быть (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;
}

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

Другие решения

Что вам нужно сделать, это обернуть if вокруг вашей попытки получить ввод, затем, если это удастся, проверьте, является ли строка, в которую вводится ввод, пустой или нет. Если он пуст, вы знаете, что пользователь нажал ввод, не вводя никаких других данных. В коде это будет что-то вроде:

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

Если вы хотите узнать, почему это так, попробуйте Google в «C ++ super FAQ» на isocpp.org.

0

По вопросам рекламы [email protected]