У меня есть двойной вопрос для вас. Я довольно новичок в C++, и я пытаюсь изменить эту программу, чтобы он мог принимать переменные и хранить их на карте. Моя проблема в том, что я действительно понятия не имею, где программа получает свои данные от пользователя!Получение ввода cin с помощью cin.get()?
Я понимаю, как он проходит через cin для оценки персонажей, но там, где он получает исходную строку, немного ошеломляет.
Я предполагаю, что он принимает его вход здесь?
int result = 0;
char c = cin.peek();
Основная проблема заключается в том, что я пытаюсь заставить программу принимать «x + 3» в качестве входных данных. Если x раньше не использовался, как пользователь для ввода, а затем сохраняет значение на карте. Если он был использован, извлеките его с карты. Я не хочу, чтобы вы, ребята, решили это для меня, но общее направление было бы действительно полезно.
Так что я думаю, мои два вопроса:
1.Where ли программа получить пользовательский ввод?
2.Что лучший способ узнать, есть ли символ в потоке? (Я вижу isalpha() может работать, это правильное направление?) Должен ли я копировать поток строку или что-то работать с ней?
#include <iostream>
#include <cctype>
using namespace std;
int term_value();
int factor_value();
/**
Evaluates the next expression found in cin.
@return the value of the expression.
*/
int expression_value()
{
int result = term_value();
bool more = true;
while (more)
{
char op = cin.peek();
if (op == '+' || op == '-')
{
cin.get();
int value = term_value();
if (op == '+') result = result + value;
else result = result - value;
}
else more = false;
}
return result;
}
/**
Evaluates the next term found in cin.
@return the value of the term.
*/
int term_value()
{
int result = factor_value();
bool more = true;
while (more)
{
char op = cin.peek();
if (op == '*' || op == '/')
{
cin.get();
int value = factor_value();
if (op == '*') result = result * value;
else result = result/value;
}
else more = false;
}
return result;
}
/**
Evaluates the next factor found in cin.
@return the value of the factor.
*/
int factor_value()
{
int result = 0;
char c = cin.peek();
if (c == '(')
{
cin.get();
result = expression_value();
cin.get(); // read ")"
}
else // Assemble number value from digits
{
while (isdigit(c))
{
result = 10 * result + c - '0';
cin.get();
c = cin.peek();
}
}
return result;
}
int main()
{
cout << "Enter an expression: ";
cout << expression_value() << "\n";
return 0;
}
EDIT 1: Моя идея заключается в следующем:
Возьмите вход и скопировать его на stringstream, что я буду проходить по отношению к функциям. Таким образом, я могу использовать peek и такие как stringstream.
После этого я возьму пользовательский ввод из cin, когда мне потребуется больше ввода пользователем для значений переменных.