[c] chiarimenti sulle liste

di il
3 risposte

[c] chiarimenti sulle liste

Ciao a tutti
devo fare un programma per un esame che lavora su una lista. Perciò volevo prima trafficare un pò con le liste per capirne bene il funzionamento.
Ho scritto un programma che gestisce le espressioni matematiche del tipo ((12+(5-8)-7)*3)
gli elementi della lista sono numeri, segni e parentesi.
Ho scritto un programmino che si limita a stampare l'espressione memorizzata nella lista

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#include<ctype.h>
#include<time.h>

typedef enum{VALUE,OPEN,CLOSE,ADD,SUB,MULT} TokenType;
typedef struct Token{
    TokenType     type;
    int           val;
    struct Token  *next;
}Token, *Expression;



int main() {
    Token pa1, add1, sgn1, pa2, add2, sgn2, add3, pc2, pc1;
    Expression e;
    e=&pa1;
    pa1.type = OPEN;
    pa1.next = &add1;
    add1.type = VALUE;
    add1.val = -12;
    add1.next = &sgn1;
    sgn1.type = ADD;    
    sgn1.next = &pa2;
    pa2.type = OPEN;    
    pa2.next = &add2;
    add2.type = VALUE;
    add2.val = 12;
    add2.next = &sgn2;
    sgn2.type = ADD;    
    sgn2.next = &add3;
    add3.type = VALUE;
    add3.val = 6;
    add3.next = &pc2;
    pc2.type = CLOSE;   
    pc2.next = &pc1;
    pc1.type = CLOSE;    
    pc1.next = NULL;
    while (e!=NULL){
        if(e->type == OPEN){
            printf(" ( " );
            e = e->next;
        }
        if(e->type == CLOSE){
            printf (" ) " );
            e = e->next;
        }
        if (e->type == ADD){
            printf("+ ");
            e = e->next;
        }
        printf("%d ",e->val);
        e = e->next;
    }

    return 0;
}
il problema lo capite dall'output

( -12 1987808469 12 + 6 ) 1987683394
ora ho due dubbi:
-perchè la stampa delle parentesi funziona solo la prima volta?
-è giusto quello che ho scritto per stampare le parentesi?

3 Risposte

Devi accedere o registrarti per scrivere nel forum
3 risposte