Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    9

    [C] Programmino Code Queue

    Salve a tutti! Ho creato questa nuova discussione, in quanto ho posto il problema che mi si presenta in un argomento sbagliato, andando fuori tema. Ho creato questo codice per la gestione di una coda, mi sapete dire dove ho sbagliato? Non capisco perché non funzioni! Grazie mille!

    codice:
    
    #include <stdio.h>
    #include <stdlib.h>
    
    
    
    
    struct queueNode{
          char  nome[12];
           char cognome[12];
           struct queueNode  *nextPtr;
           };
           
    typedef struct queue QueueNode [120];
    typedef QueueNode *QueueNodePtr;
    
    
    void printQueue( QueueNodePtr currentPtr);
    int isEmpty( QueueNodePtr headPtr);
    char dequeue( QueueNodePtr *headPtr, QueueNodePtr *tailPtr);
    void enqueue( QueueNodePtr *headPtr,QueueNodePtr *tailPtr, char value);
    
    
    void instructions(void);
           
           
            
    int main(int argc, char *argv[])
    {
        QueueNodePtr headPtr=NULL;
        QueueNodePtr tailPtr=NULL;
        int choice;
        char item;
        
        Instructions();
        printf("?");
        scanf("%d",&choice);
        
        while(choice!=3){
        
        switch(choice){
                       
                       case 1: printf("Inserisci un nome\n");
                               scanf("%s",nome);
                               enqueue(&headPtr,&tailPtr,nome);
                               printQueue(headPtr);
                               break;
                               
                       case 2: printf("Togli nome dalla coda.\n");
                               if(!isEmpty(headPtr)){
                               queueNode.nome[i]=dequeue(&headPtr,&tailPtr);
                               printf("%s e' stato rimosso.\n",queueNode.nome);
                               }
                               printQueue(headPtr);
                               break;
                               
                       default:
                               printf("Scelta non valida!\n");
                               instructions();
                               break;
                       }
                               
      
                      printf("Inserisci un numero di scelta\n");
                      scanf("%d",&choice);
                      }
                      printf("Fine del programma\n");
                      
      system("PAUSE");    
      return 0;
    }
    
    
    
    
    void instructions(void)
     {
         printf("Inserisci la tua scelta!\n"
                "1. Per aggiungere un nome alla coda\n"
                "2.Per rimuovere il nome dalla coda\n"
                "3. Per terminare il programma\n");
     }
     
     void enqueue(QueueNodePtr *headPtr, QueueNodePtr *tailPtr, char value[])
     
     {
          QueueNodePtr newPtr;
          
          newPtr=malloc(sizeof(QueueNode));
          
          if(newPtr!=NULL)
          {newPtr->data=value;
          newPtr->nextPtr=NULL;
          
          
          if(isEmpty(*headPtr)){
                                *headPtr=newPtr;
                                }
                                
          else { 
               (*tailPtr)->nextPtr=newPtr;
               }
               
               
          *tailPtr=newPtr;
          }
          
          else{
               printf("%s non inserito. Memoria non disponibile!\n",value[]);
               }
               }
               
               char dequeue(QueueNodePtr *headPtr,QueueNodePtr *tailPtr)
               
               {
                    char value[12];
                    QueueNodePtr tempPtr;//Puntatore ad un nodo temporaneo
                    
                    value=(*headPtr)->nome[];
                    tempPtr=*headPtr;
                    *headPtr=(*headPtr)->nextPtr;
                    
                    
               if(*headPtr==NULL)
               {
                                 *tailPtr=NULL;
               }
               
               free(tempPtr);
               return value;
               
               }
               
               int isEmpty(QueueNodePtr headPtr)
               
               return headPtr==NULL;
               }
               
               void printQueue(QueueNodePtr currentPtr)
               
               {
                    return headPtr==NULL;
               }
               
               void printQueue(QueueNodePtr currentPtr)
               
               {
                    
                    if(currentPtr==NULL)
                    {
                                        printf("La coda e' vuota!\n");
                    }
                    
                    else {
                    printf("La coda e':\n");
                    
                    
                    while(currentPtr!=NULL){
                         printf("%c-->",currentPtr->nome[]);
                         currentPtr=currentPtr->nextPtr;
                         }
                         
                         printf("NULL\n");
                         }
                         }

  2. #2
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    Ciao,
    prima che ci mettiamo a guardare il codice dovresti dirci precisamente cosa non funziona.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    9
    Ciao minomic! Ho creato questo programma basandomi sul Deitel, il programma non parte e Dev mi riscontra vari errori! Credo di aver sbagliato qualcosa nel codice, in particolare nel memorizzare nome e cognome nella struttura! Non capisco perchè mi riporti così tanti errori! Tra i vari errori Dev riscontra "`headPtr' undeclared (first use in this function)"...

  4. #4
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    Ho corretto il codice; c'erano diversi problemi che non sto ad elencarti: ti conviene guardare le differenze tra prima e ora.
    Inoltre, secondo me, è sbagliata la funzione di dequeue: la tua enqueue inserisce un elemento in fondo alla lista (e questo va bene), mentre la tua dequeue elimina un elemento dalla testa della lista. Probabilmente dovrebbe invece eliminare un elemento dal fondo della coda, dato che il funzionamento dovrebbe essere FIFO (First In First Out). Comunque io ho lasciato come avevi scritto tu.

    Ecco il codice:

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    
    struct queueNode
    {
        char  nome[12];
        struct queueNode  *nextPtr;
    };
    
    
    typedef struct queueNode QueueNode;
    typedef QueueNode *QueueNodePtr;
    
    
    
    
    void printQueue( QueueNodePtr currentPtr);
    int isEmpty( QueueNodePtr headPtr);
    char * dequeue( QueueNodePtr *headPtr, QueueNodePtr *tailPtr);
    void enqueue( QueueNodePtr *headPtr,QueueNodePtr *tailPtr, char *value);
    
    
    void instructions(void);
    
    
    int main(int argc, char *argv[])
    {
        QueueNodePtr headPtr=NULL;
        QueueNodePtr tailPtr=NULL;
        int choice;
        char name[12];
    
    
        instructions();
        printf("?");
        scanf("%d",&choice);
    
    
        while(choice!=3)
        {
    
    
            switch(choice)
            {
    
    
            case 1:
                printf("Inserisci un nome\n");
                scanf("%s",name);
                enqueue(&headPtr,&tailPtr,name);
                printQueue(headPtr);
                break;
    
    
            case 2:
                printf("Togli nome dalla coda.\n");
                char *nome_prelevato;
                if(!isEmpty(headPtr))
                {
                    nome_prelevato=dequeue(&headPtr,&tailPtr);
                    printf("%s e' stato rimosso.\n",nome_prelevato);
                }
                printQueue(headPtr);
                break;
    
    
            default:
                printf("Scelta non valida!\n");
                instructions();
                break;
            }
    
    
            printf("Inserisci un numero di scelta\n");
            scanf("%d",&choice);
        }
        printf("Fine del programma\n");
    
    
        system("PAUSE");
        return 0;
    }
    
    
    void instructions(void)
    {
        printf("Inserisci la tua scelta!\n"
               "1. Per aggiungere un nome alla coda\n"
               "2.Per rimuovere il nome dalla coda\n"
               "3. Per terminare il programma\n");
    }
    
    
    void enqueue(QueueNodePtr *headPtr, QueueNodePtr *tailPtr, char *value)
    {
        QueueNodePtr newPtr;
    
    
        newPtr=malloc(sizeof(QueueNode));
    
    
        if(newPtr!=NULL)
        {
            strcpy(newPtr->nome, value);
            newPtr->nextPtr=NULL;
    
    
            if(isEmpty(*headPtr))
            {
                *headPtr=newPtr;
            }
    
    
            else
            {
                (*tailPtr)->nextPtr=newPtr;
            }
            
            *tailPtr=newPtr;
        }
    
    
        else
        {
            printf("%s non inserito. Memoria non disponibile!\n",value);
        }
    }
    
    
    char * dequeue(QueueNodePtr *headPtr,QueueNodePtr *tailPtr)
    {
        char *value;
        value = malloc(12 * sizeof(char));
        QueueNodePtr tempPtr;//Puntatore ad un nodo temporaneo
    
    
        strcpy(value, (*headPtr)->nome);
        tempPtr=*headPtr;
        *headPtr=(*headPtr)->nextPtr;
    
    
    
    
        if(*headPtr==NULL)
        {
            *tailPtr=NULL;
        }
    
    
        free(tempPtr);
        return value;
    }
    
    
    
    
    int isEmpty(QueueNodePtr headPtr)
    {
        return headPtr==NULL;
    }
    
    
    
    
    void printQueue(QueueNodePtr currentPtr)
    {
        if(currentPtr==NULL)
        {
            printf("La coda e' vuota!\n");
        }
    
    
        else
        {
            printf("La coda e':\n");
    
    
            while(currentPtr!=NULL)
            {
                printf("%s --> ",currentPtr->nome);
                currentPtr=currentPtr->nextPtr;
            }
    
    
            printf("NULL\n");
        }
    }

    Ciao.

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Quote Originariamente inviata da Evolet Visualizza il messaggio
    il programma non parte e Dev mi riscontra vari errori!
    [...]
    Non capisco perchè mi riporti così tanti errori!
    Solo una precisazione: quando l'ambiente di sviluppo ti segnala degli errori, pochi o tanti che siano, devi riportarli (copia e incolla) nella discussione. minomic te l'aveva chiesto già nel suo intervento. Questo serve agli utenti del forum per avere un'idea di cosa cercare e per velocizzare le operazioni di ricerca degli errori e, di conseguenza, serve a te per ottenere un'informazione più rapida per risolvere il tuo problema. Se tu non fornisci nessuna informazione sugli errori che ottieni, è come se andassi dal medico a dirgli "sto male" e, dopo che il medico ti abbia chiesto i sintomi tu gli rispondessi con "sto molto male". I messaggi di errore dell'ambiente di sviluppo sono importantissimi.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    9
    Grazie mille minomic!! Chiedo venia se non ho riportato tutti gli errori, sono alle prime armi con la programmazione (e ci sto passando ore) e con il forum! Vi ringrazio tantissimo per avermi aiutata!!

  7. #7
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    Prego. Se hai altri problemi, facci sapere.

    Ciao.

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.