#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,程式就錯誤,求解答
uj5u.com熱心網友回復:
為什么沒人回復,求解答
uj5u.com熱心網友回復:
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();)出錯
uj5u.com熱心網友回復:
不要用getline,getline會自動過濾字串末尾的回車,會出現一系列問題uj5u.com熱心網友回復:
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();
}
uj5u.com熱心網友回復:
理論上來說,應該沒什么問題,是不是按鍵輸入的時候,有問題啊,在執行回圈前你可以把num的值列印出來看看,是不是跟你輸入的是一樣的轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/137577.html
標籤:數據庫及相關技術
上一篇:高分懸賞~~關于Float型別資料處理的問題~~~~~
下一篇:請教個組件問題
