PDA

Visualizza la versione completa : [C] aiuto con stampa di una lista


Paolo1991
30-11-2011, 21:44
Ciao a tutti. sto imparando ad usare le liste ma ho alcuni problemi...
uno di questi è ad esempio la stampa!

l'esercizio dice di trattare una "catena di montaggio"... fatto sta che devo immagazinare dei dati in una lista e poi stamparla. vi allego i due moduli che ho scritto. sapete dirmi anche solo dove sbaglio? grazie!


main.c

#include <stdio.h>
#include <stdlib.h>
#include "coda.h"

int main()
{
int key = -1;


while (key != 0)
{
printf("\n1) Avvio Job.");
printf("\n2) Termino Job."); //non sviluppato
printf("\n3) Stampa lista Job.");
printf("\n\t... o '0' per terminare. ");
printf("\n\t Inserisci comando: ");
fscanf(stdin, "%d", &key);

switch (key)
{
case 1: new_job();
break;
case 2: //termino job
break;
case 3: print_job();
case 0:
break;
default:
printf("\n Comando Errato. Riprova!\n");

}
}
return (EXIT_SUCCESS);
}


coda.h

#include <stdio.h>
#include <stdlib.h>
#include "Item.h"

typedef struct nodo* Link;

typedef struct nodo{
Job job;
Link next;
} nodo;

void new_job();

void print_job();

coda.c

#include <stdio.h>
#include <stdlib.h>
#include "coda.h"

struct queue
{
Link head;
Link tail;
} record;

void new_job()
{
Link nuovo_job;
nuovo_job = (nodo*) malloc(sizeof (Link));
get_item(&(nuovo_job->job));
if (record.head == NULL)
{
record.head = nuovo_job;
}
else
while (record.tail != NULL)
record.tail = (record.tail)->next;
printf("\n\tjob in processo!");
return;
}

void print_job()
{
Link scroll;
scroll = record.head;

do
{
print_item(scroll->job);
scroll=scroll->next;
}
while(scroll!=NULL);*/

return;
}



Item.h

#include <stdio.h>
#include <stdlib.h>

typedef struct Job{
char lavoro[30];
int priority;
}Job;

void get_item(Job* nodo);
void print_item(Job nodo);


Item.c

#include <stdio.h>
#include <stdlib.h>
#include "Item.h"

void get_item(Job* nodo)
{
printf("\nInserisci nome job: ");
fscanf(stdin, "%s", nodo->lavoro);

printf("\nInserisci la sua priorita': ");
fscanf(stdin, "%d", &(nodo->priority));

return;
}

void print_item(Job nodo)
{
printf("%s %d\n", nodo.lavoro, nodo.priority);

return;
}

oregon
30-11-2011, 21:52
Originariamente inviato da Paolo1991
sapete dirmi anche solo dove sbaglio?

Non è meglio che tu ci dica che errori/malfunzionamenti hai?

Paolo1991
30-11-2011, 21:58
scusami hai ragione... colpa della frustrazione :P

comunque non ho nessun errore, per quello non riesco a correggere...

l'inserzione sembra (sottolineo sembra) funzionare (mi nascono però dubbi sulla corretta memorizzazione dei valori). se provo a inserire un paio di valori (cioè stringa + numero), mi stampa solo la prima stringa che ho inserito e al posto del numero penso mi stampi qualche cella di memoria, dato che è sempre lo stesso! non ho idea di dove sia il problema... penso sia un errore logico e non di sintassi a questo punto :\

ps. il main consiste in uno switch semplice che chiama le funzioni in coda.c ma se pensi sia utile lo allego...

oregon
30-11-2011, 22:06
Ma il main dov'è ?

Paolo1991
30-11-2011, 22:09
appena incluso a inizio thread

oregon
30-11-2011, 22:17
Intanto questa

nuovo_job = (nodo*) malloc(sizeof (Link));

deve essere

nuovo_job = (Link) malloc(sizeof (nodo));

Paolo1991
30-11-2011, 22:22
grazie mille, correggo subito... ora mi stampa anche il numero correttamente... ci deve essere un altro errore però ancora...

Loading