?? sulin.cpp
字號:
#include<iostream.h>
int lin,kuohao;
char jiajian;
int biaods(char a,int i);
int xiang(char a);
int yinzi(char a);
void main(){
char a;
cout<<"請輸入表達式(以‘;’結束):"<<endl;
while(cin>>a&&a!='#'){
lin=0;kuohao=0;
jiajian=' ';
int shu=0;
if(a=='-'){cin>>a;shu=biaods(a,-1);}
else if(a=='+'){cin>>a;shu=biaods(a,1);}
else {shu=biaods(a,1);}
if(lin==0){cout<<"值為:"<<shu<<endl;}
else {
cout<<"error"<<lin<<endl;
char *w=new char [200];char q;
cin.get(w,200,';'); //讀行消去其他錯誤語言到下一個";"
cin.get(q);
}
}
}
int biaods(char a,int i){
if(lin==0){
int x=i*xiang(a);int y=0;
while(lin==0){ //lin==0不出現錯誤
if(jiajian==')'){ // 判斷出現“)”錯誤
cin>>a;kuohao--;
jiajian=a;
if(kuohao>=0)return x;
else {lin=4;return -1;}
}
else if(jiajian==';'){jiajian=' ';return x;}
else if(jiajian=='+'){
jiajian=' ';cin>>a;y=xiang(a);
cout<<"lit 0 "<<x<<endl;
cout<<"lit 0 "<<y<<endl;
cout<<"opr 0 2"<<endl;
x+=y;y=0;
}
else if(jiajian=='-'){
jiajian=' ';cin>>a;y=xiang(a);
cout<<"lit 0 "<<x<<endl;
cout<<"lit 0 "<<y<<endl;
cout<<"opr 0 3"<<endl;
x-=y;y=0;
}
else {lin=1;return -1;}
}
}
}
int xiang(char a){
if(lin==0){
int x=yinzi(a);int y=0;
while(lin==0){
if(jiajian==')'){return x;}
else if(jiajian==';'){return x;}
else if(jiajian=='+'){return x;}
else if(jiajian=='-'){return x;}
else if(jiajian=='*'){
jiajian=' ';cin>>a;
y=yinzi(a);
cout<<"lit 0 "<<x<<endl;
cout<<"lit 0 "<<y<<endl;
cout<<"opr 0 4"<<endl;
x*=y;y=0;
}
else if(jiajian=='/'){
jiajian=' ';cin>>a;
y=yinzi(a);
cout<<"lit 0 "<<x<<endl;
cout<<"lit 0 "<<y<<endl;
cout<<"opr 0 5"<<endl;
x/=y;y=0;
}
else {lin=2;return -1;}
}
}
}
int yinzi(char a){
if(lin==0){
int b=a-48; //字符型轉換為整型
if(b>=0&&b<=9){ // 數字則轉化為十進制數
while(lin==0&&cin>>a&&(a>=48&&a<=57)){
b=b*10+a-48;
}
jiajian=a; //什么作用?
return b;
}
else if(a=='('){
cin>>a;kuohao++;
if(a=='-'){cin>>a;return biaods(a,-1);}
else if(a=='+'){cin>>a;return biaods(a,1);}
else return biaods(a,1);
}
else{lin=3;return -1;} //輸入有誤 括號中或者為數字,或者為正負號,不可能有別的情況
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -