C++学习ing遇到的问题

嘿_____ 2013-04-19 09:35:16
#include<iostream>
#include<stack>
#include<string>
#include<iomanip>
using namespace std;
double eval(string e)
{ stack<double> s;
double k,t,sum;
int i=e.size(),j;
for(j=0;j<i;j++)
{ if(e[j]=='+'||e[j]=='*'||e[j]=='/'||e[j]=='-')
{ t=s.top();
s.pop();
k=s.top();
s.pop();
if(e[j]=='+') sum=k+t;
if(e[j]=='-') sum=k-t;
if(e[j]=='*') sum=k*t;
if(e[j]=='/') sum=k/t;
s.push(sum);
}
else s.push((double)(e[j]-96));
}
return s.top();
}
int main()
{ int num;
string ad;
cin>>num;
for(int i=0;i<num;i++)
{ getline(cin,ad);
cout<<fixed<<setprecision(2)<<eval(ad)<<endl;
}
return 0;
}

以上是程序,遇到点小问题,在main的输入语句 cin>>num; 出现问题,只要我把这一行去掉,自己给num赋值,程序没错,但是我一旦用cin,程序就错误,求解答
...全文
288 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
nextseconds 2013-07-19
  • 打赏
  • 举报
回复
理论上来说,应该没什么问题,是不是按键输入的时候,有问题啊,在执行循环前你可以把num的值打印出来看看,是不是跟你输入的是一样的
  • 打赏
  • 举报
回复
int main() { int num; string ad; cin>>num; getchar(); //截获回车键 for(int i=0;i<num;i++) { getline(cin,ad); cout<<fixed<<setprecision(2)<<eval(ad)<<endl; } return 0; } double eval(string e) { stack<double> s; double k,t,sum; int i=e.size(),j; for(j=0;j<i;j++) { if(e[j]=='+'||e[j]=='*'||e[j]=='/'||e[j]=='-') { t=s.top(); s.pop(); k=e[j+1]; //k=s.top(); //屏蔽 //s.pop(); if(e[j]=='+') sum=k+t; if(e[j]=='-') sum=k-t; if(e[j]=='*') sum=k*t; if(e[j]=='/') sum=k/t; s.push(sum); } else s.push((double)(e[j]-96)); } return s.top(); }
  • 打赏
  • 举报
回复
不要用getline,getline会自动过滤字符串末尾的回车,会出现一系列问题
  • 打赏
  • 举报
回复
int main() { int num; string ad; cin>>num; for(int i=0;i<num;i++) { getline(cin,ad); cout<<fixed<<setprecision(2)<<eval(ad)<<endl; } return 0; } 比如你输入3+5-2,num取第一个字符3,走到语句(for(int i=0;i<num;i++))时,输入流中的内容只剩下(+5-2),进入子函数eval中,走到语句(t=s.top();)出错
嘿_____ 2013-04-20
  • 打赏
  • 举报
回复
为什么没人回复,求解答

1,178

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 数据库及相关技术
社区管理员
  • 数据库及相关技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧