Проблемы с использованием cin.peek () и определения конца ввода с помощью cin.peek ()

0
 1 #include<iostream>
 2 using namespace std;
 3
 4 #include"dstack.h"
 5
 6 int main()
 7 {
 8  char value = cin.peek();
 9  char op;
10  double num;
11
12  while(value != cin.eof())
13  {
14   if( (isdigit(value) || value == '.') )
15   {
16    cout << "you entered a digit!" << endl;
17    cin >> num;
18   }
19
20   else if( (isspace(value)) )
21   {
22    cout << "white space" << endl;
23    cin.ignore();
24   }
25
26   else if( (!isdigit(value)) )
27   {
28    cout << "You entered a character" << endl; // I want this to catch operators
29    cin >> op;
30   }
31  }
32  cout << "No more input" << endl;
33 }

Хорошо, поэтому в основном то, что я пытаюсь сделать, это создать постфиксный калькулятор и реализовать стек. Я могу понять это, но я просто пытаюсь понять основные данные для этой программы, и я не знаком с cin.peek(). То, что я хочу сделать, это игнорировать whitespace с cin.ignore(), если пользователь вводит число 0-9 или период ('.'), Я хочу ввести double, и если пользователь вводит оператор (+, -, ^,/, *), затем введите символ. Тем не менее, я не могу понять, как правильно использовать cin.peek(), если кто-то может указать мне в правильном направлении, это было бы очень признательно. Пример ввода будет примерно таким же, как 10 20 40++ (без пробелов между числами и операторами и операторами и операторами), а затем пользователь нажимает ctrl + d для завершения ввода.

Теги:
stack
cin

1 ответ

0

Ну, in.peek() будет читать текущий символ или вернуть std::char_traits<char>::eof() если EOF достигнут. Выражение in.eof() дает булевский флаг, указывающий, достиг ли поток в EOF в какой-то момент. То есть, условие цикла, вероятно, будет выглядеть примерно так:

for (int c; (c = (std::cin >> std::ws).peek()) != std::char_traits<char>::eof(); ) {
    if (std::isdigit(c) || '.') {
       ...
    }
    ...
}

Выражение, читающее следующий символ, начинается с пропущенного пробела (удалите >> std::ws если вам это не нравится) и проверяет результат на возврат значения, если EOF достигнут после того, как он также сохранил его в переменной c.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню