【问题标题】:Issue with cin.peek() and having issues getting correct inputcin.peek() 问题和获取正确输入的问题
【发布时间】:2013-10-22 21:04:43
【问题描述】:

好的,所以最终我将制作一个带有堆栈实现的后缀计算器并获得诸如 45 20+ 之类的输入。我只是无法正确输入,我想忽略空格,如果用户输入一个数字,我想输入一个双精度数,如果用户输入一个运算符,例如 +,我想输入一个字符。我目前的情况如下:

  1 #include"dstack.h"
  2
  3 #include<iostream>
  4 #include<stdlib.h>
  5 using namespace std;
  6
  7 void error();
  8
  9 int main()
 10 {
 11  char value = cin.peek();
 12  char op;
 13  double num;
 14
 15  while(!cin.eof())
 16  {
 17   if( (isdigit(value)) ) //|| value == '.') )
 18   {
 19    cin >> num;
 20    cout << "Your number is: " << num << endl;
 21   }
 22
 23   else if( (isspace(value)) )
 24   {
 25    cin.ignore();
 26   }
 27
 28   else if ( (value = '+') )
 29   {
 30    cin >> op;
 31    cout << "You entered a char: " << op << endl;
 32   }
 33
 34   else if ( (isalpha(value)) )
 35   {
 36    error();
 37   }
 38  }
 39  cout << "No more input" << endl;
 40 }
 41
 42 void error()
 43 {
 44  cerr << "error" << endl;
 45  exit(1);
 46 }

由于我只是测试,我还没有将任何东西放在堆栈或任何类似的东西上,还有更多的运算符,我只是测试'+'以使其工作。发生的事情是,如果我输入一个数字,它工作得很好,但是说我输入 30,按回车,然后输入 +,然后回车,它将我的 cout 循环用于数字语句一百万次。我的程序是否卡在每个 if 语句中?任何帮助将不胜感激,如果需要任何澄清或其他信息,请询问。数字之间需要有空格,空格需要忽略,运算符之间不需要空格。最终,应该发生的是用户输入诸如 30 30 30++ 之类的内容,然后它会计算该等式。

【问题讨论】:

    标签: c++ string char stack cin


    【解决方案1】:
    else if ( (value = '+') )
    

    应该是

     else if (value == '+')
    

    使用== 进行比较。

    【讨论】:

    • 谢谢,我确实看到并相应地修复了它
    【解决方案2】:

    我想通了,我搞砸了并设置了 char value = cin.peek(),应该只是在函数中使用 cin.peek(),时间花在简单的错误上:D。

    【讨论】:

      猜你喜欢
      • 2013-08-30
      • 1970-01-01
      • 1970-01-01
      • 2022-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-27
      相关资源
      最近更新 更多