#include<windows.h>
#include<stdio.h>
#include<stdlib.h>
#include"header.h"
void main()
{
SqStack OPTR, OPND;
OperandType a, b, d, x, theta;
char c; //存放鍵盤輸入的字串
char z[6]; //存放整數字串
int i,j;
int s=1;
menu();
InitStack(&OPTR); //初始化運算子堆疊
Push(&OPTR, '='); //=是運算式結束符
InitStack(&OPND); //初始化運算元堆疊
do{
scanf("%d",&j);
switch(j){
case 1://1.輸入運算式
printf("輸入運算式\n");
scanf("%s",c);
break;
case 2://2.輸出運算式
printf("%s",c);
break;
case 3://3.判斷運算式的括號是否匹配并計算運算式的值
GetTop(&OPTR, &x);
while(c != '=' || x != '=')
{
if(In(c)) //是7種運算子之一
{
switch(Precede(x, c))
{
case '<': //當前已經壓堆疊一個運算子(x)比后一個運算子(c)低時,就將c壓堆疊
Push(&OPTR, c);
c = getchar();
break;
case '=':
Pop(&OPTR, &x); //脫括號并接收下一字符
c = getchar();
break;
case '>':
Pop(&OPTR, &theta); //退堆疊并將運算結果壓入OPND中
Pop(&OPND, &b);
Pop(&OPND, &a);
Push(&OPND, Operate(a, theta, b));
break;
}
}
else if(c >= '0' && c <= '9') //c是運算元
{
i = 0;
do
{
z[i] = c;
i ++;
c = getchar();
}while(c >= '0' && c <= '9');
z[i] = 0;
d = atoi(z); //將字符陣列轉為整型存于d
Push(&OPND, d);
}
else //c為非法字符
{
printf("ERROR3\n");
exit(1);
}
GetTop(&OPTR, &x);
}
GetTop(&OPND, &x);
StackDestroy(&OPTR);
StackDestroy(&OPND);
printf("%d\n",x);
break;
case 4://4.退出
s=0;
break;
}
}
while(s==1);
printf("已退出\n");
}
進入switch之后,輸入1,無法輸入2,請問要怎么改?我太菜了


uj5u.com熱心網友回復:
代碼不全,幫整理,2處地方有修改,供參考:#include<windows.h>
#include<stdio.h>
#include<stdlib.h>
//#include"header.h"
void main()
{
SqStack OPTR, OPND;
OperandType a, b, d, x, theta;
char c; //存放鍵盤輸入的字串 ???
char z[6]; //存放整數字串
int i,j;
int s=1;
menu();
InitStack(&OPTR); //初始化運算子堆疊
Push(&OPTR, '='); //=是運算式結束符
InitStack(&OPND); //初始化運算元堆疊
do{
scanf("%d",&j);
switch(j){
case 1://1.輸入運算式
printf("輸入運算式\n");
scanf("%c",&c); //scanf("%s",c);這里c是單個字符,不是字串 錯誤1
break;
case 2://2.輸出運算式
printf("%c",c); //printf("%s",c); 錯誤2
break;
case 3://3.判斷運算式的括號是否匹配并計算運算式的值
GetTop(&OPTR, &x);
while(c != '=' || x != '=')
{
if(In(c)) //是7種運算子之一
{
switch(Precede(x, c))
{
case '<': //當前已經壓堆疊一個運算子(x)比后一個運算子(c)低時,就將c壓堆疊
Push(&OPTR, c);
c = getchar();
break;
case '=':
Pop(&OPTR, &x); //脫括號并接收下一字符
c = getchar();
break;
case '>':
Pop(&OPTR, &theta); //退堆疊并將運算結果壓入OPND中
Pop(&OPND, &b);
Pop(&OPND, &a);
Push(&OPND, Operate(a, theta, b));
break;
}
}
else if(c >= '0' && c <= '9') //c是運算元
{
i = 0;
do{
z[i] = c;
i ++;
c = getchar();
}while(c >= '0' && c <= '9');
z[i] = 0;
d = atoi(z); //將字符陣列轉為整型存于d
Push(&OPND, d);
}
else //c為非法字符
{
printf("ERROR3\n");
exit(1);
}
GetTop(&OPTR, &x);
}
GetTop(&OPND, &x);
StackDestroy(&OPTR);
StackDestroy(&OPND);
printf("%d\n",x);
break;
case 4://4.退出
s=0;
break;
}
}while(s==1);
printf("已退出\n");
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/275584.html
標籤:C++ 語言
下一篇:【C/C++】面相物件開發之封裝
