hvor er fejlen i koden??

Tags:    c++

<< < 123 > >>
Skal lave et program, der evaluerer RPN udtryk. Operanderne er enkelt cifret heltal, og operatørerne der er brugt er følgende +,-,*,/ og =.

fx:
Enter an RPN expression: 1 2 3 * + =
Value of expression: 7
Enter an RPN expression: 5 8 * 4 9 - / =
Value of expression: -8

Jeg synes opgaven er lidt svært da et af kravene til opgaven er, at man skal bruge scanf("%ch", &ch).
____________________________________

#include <stdbool.h> // C99 only

#define STACK_SIZE 100

// external variables
int contents[STACK_SIZE];
int top = 0;
int stack_overflow (){return 0;}
int stack_underflow (){return 0;}

void make_empty(void)
{
top = 0;
}

bool is_empty(void)
{
return top == 0;
}

bool is_full(void)
{
return top == STACK_SIZE;
}

void push(int i)
{
if (is_full())
stack_overflow();
else
contents[top++] = i;
}

int pop(void)
{
if (is_empty())
stack_underflow();
else
return contents[--top];
}

int main (void)
{
char ch;

scanf(" %c", &ch);
while(ch != '=' && ch != '\n')
{
if(ch>='0' && ch<='9')
push(ch-'0');
else switch(ch){
case '+': push(pop()+pop());break;

case '-': push(pop()+pop());break;

case '*': push(pop()*pop());break;

case '/': push(pop()/pop());break;

default :
{
printf("Expression is too complex %c",ch);
}
}

scanf(" %c", &ch);
}
return 0;
}




24 svar postet i denne tråd vises herunder
0 indlæg har modtaget i alt 0 karma
Sorter efter stemmer Sorter efter dato
kommer case(=) så til at se således ud:

case '=':
n1 = pop();
n2 = pop();
n3 = n1 = n2;
printf("%d = %d = %d\n", n2, n1, n3);
push(n3);
break;



Det kunne den måske godt, men hvorfor?

Det den gør er at poppe de to sidste variabler fra stakken, og pushe den seneste. Så hvis stakken så sådan ud: "1234", ville den skrive: "3 = 3 = 3" (hvilket unægteligt er sandt) og pushe 3 igen, hvorved stakken vil komme til at se sådan ud: "123".

Det er dog næppe den man vil forvente at = gør.



ja det har du sku ret i. troede bare der var en måde at programmet til at skrive "Not enough expression", hvis det var man ikke skrev =.



okay så skriver jeg herinde på min startede tråd:)

I think I can explain, what = does better, in English: The = operator causes the top stack item to be displayed; afterwards, the stack is cleared and the user is prompted to enter another expression.

Men jeg tror sku nok jeg langt om længe har fundet løsningen:)

Men mange TAK for din hjælp. Du er sku en guttermand!




<< < 123 > >>
t