Newsgroup: it.comp.lang.c
Titolo: [help], liste e file

ciao a tutto il newsgroup
dunque, devo fare un programma che legge un file come questo (escluse
le virgolette):
"AZ111 milano 12:34 23
AZ222 buenos-aires 12:55 245
BA333 toronto 4:15 20
KM444 madrid 10:12 100"
e mette ogni riga dentro un elemento di una lista; poi devo
visualizzare la lista. il programma è questo qua sotto, ma credo che
cia "qualche" errore... dove?
/* inizio */
#include <stdio.h>
#include <stdlib.h>
struct time {
	int ora;
	int minuto;
};
typedef struct time TIME;
struct elemento {
	char numero[5];
	char destinaz[20];
	TIME oremin;
	int postilib;
	struct elemento *next;
};
/*struttura degli elementi della lista*/
typedef struct elemento ELEM;
ELEM* prendiinfo(char nomefile[20]); 
/* funzione che mette il fine nella lista*/
void leggilista(ELEM *pStart);
int main(void)
{
	char nomefile[20];
	ELEM *pStart;
	printf("nome del file :\n");
	scanf("%s", nomefile);
	pStart = prendiinfo(nomefile);
	leggilista(pStart);
	return 0;
}
ELEM* prendiinfo(char nomefile[20])
{
	ELEM *pStart, *pTmp, *pNext;
	FILE *f;
	int i = 1;
	if ((f = fopen(nomefile, "r")) != NULL) {
		while (!feof(f)) {
			if (i == 1) {
				pStart = malloc(sizeof(ELEM));
				pTmp = pStart;
				pStart->next = NULL;
			}
			else {
				pNext = malloc(sizeof(ELEM));
				pTmp->next = pNext;
				pTmp = pTmp->next;
				pTmp->next = NULL;
			}
			i++;
/*gestisce in modo diverso il primo elem. della lista e i successivi*/
			fscanf(f, "%s", &(pTmp->numero));
			fscanf(f, "%s", &(pTmp->destinaz));
			fscanf(f, "%d", &(pTmp->oremin.ora));
			fscanf(f, "%d", &(pTmp->oremin.minuto));
			fscanf(f, "%d", &(pTmp->postilib));
/*credo che qui ci sia qualcosa di sbagliato*/
		}
		fclose(f);
	}
	else
		printf("errore\n");
	return pStart;
}
void leggilista(ELEM *pStart)
{
	while (pStart != NULL) {
		printf("%s  %s\n%d:%d  %d\n", 
			pStart->numero, pStart->destinaz,
			pStart->oremin.ora, pStart->oremin.minuto,
			pStart->postilib); 
		pStart = pStart->next;
	}
}
/*fine*/
grazie per l'attenzione

ho aggiustato un po' la funzione prendiinfo(): c'era un errore, che ho
corretto, ma di certo ce ne sono molti altri! 
grazie x l'attenzione.
/* inizio */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct time {
	int ora;
	int minuto;
};
typedef struct time TIME;
struct elemento {
	char numero[5];
	char destinaz[20];
	TIME oremin;
	int postilib;
	struct elemento *next;
};
typedef struct elemento ELEM;
ELEM* prendiinfo(char nomefile[20]);
void leggilista(ELEM *pStart);
int main(void)
{
	char nomefile[20];
	ELEM *pStart;
	printf("nome del file:\n");
	scanf("%s", nomefile);
	pStart = prendiinfo(nomefile);
	leggilista(pStart);
	return 0;
}
ELEM* prendiinfo(char nomefile[20])
{
	ELEM *pStart, *pTmp, *pNext;
	FILE *f;
	int i = 1;
	int ora, minuto, postilib;
	char numero[5], destinaz[20];
	char c;
	if ((f = fopen(nomefile, "r")) != NULL) {
		while (!feof(f)) {
			if (i == 1) {
				pStart = malloc(sizeof(ELEM));
				pTmp = pStart;
				pStart->next = NULL;
			}
			else {
				pNext = malloc(sizeof(ELEM));
				pTmp->next = pNext;
				pTmp = pTmp->next;
				pTmp->next = NULL;
			}
			i++;
			fscanf(f, "%s", numero);
			fscanf(f, "%s", destinaz);
			fscanf(f, "%d", &ora);
			fscanf(f, "%c", &c);
/* qui c'era un errore: non consideravo i due punti : */
			fscanf(f, "%d", &minuto);
			fscanf(f, "%d", &postilib);
			strcpy(pTmp->numero, numero);
			strcpy(pTmp->destinaz, destinaz);
			pTmp->oremin.ora = ora;
			pTmp->oremin.minuto = minuto;
			pTmp->postilib = postilib;
		}
		fclose(f);
	}
	else {
		printf("errore\n");
		pStart = NULL;


ho aggiustato un po' la funzione prendiinfo(): c'era un errore, che ho
corretto, ma di certo ce ne sono molti altri! 
grazie x l'attenzione.
/* inizio */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct time {
	int ora;
	int minuto;
};
typedef struct time TIME;
struct elemento {
	char numero[5];
	char destinaz[20];
	TIME oremin;
	int postilib;
	struct elemento *next;
};
typedef struct elemento ELEM;
ELEM* prendiinfo(char nomefile[20]);
void leggilista(ELEM *pStart);
int main(void)
{
	char nomefile[20];
	ELEM *pStart;
	printf("nome del file: \n");
	scanf("%s", nomefile);
	pStart = prendiinfo(nomefile);
	leggilista(pStart);
	return 0;
}
ELEM* prendiinfo(char nomefile[20])
{
	ELEM *pStart, *pTmp, *pNext;
	FILE *f;
	int i = 1;
	int ora, minuto, postilib;
	char numero[5], destinaz[20];
	char c;
	if ((f = fopen(nomefile, "r")) != NULL) {
		while (!feof(f)) {
			if (i == 1) {
				pStart = malloc(sizeof(ELEM));
				pTmp = pStart;
				pStart->next = NULL;
			}
			else {
				pNext = malloc(sizeof(ELEM));
				pTmp->next = pNext;
				pTmp = pTmp->next;
				pTmp->next = NULL;
			}
			i++;
			fscanf(f, "%s", numero);
			fscanf(f, "%s", destinaz);
			fscanf(f, "%d", &ora);
			fscanf(f, "%c", &c);
/* qui c'era un errore: non consideravo i due punti : */
			fscanf(f, "%d", &minuto);
			fscanf(f, "%d", &postilib);
			strcpy(pTmp->numero, numero);
			strcpy(pTmp->destinaz, destinaz);
			pTmp->oremin.ora = ora;
			pTmp->oremin.minuto = minuto;
			pTmp->postilib = postilib;
		}
		fclose(f);
	}
	else {
		printf("errore\n");
		pStart = NULL;


 printf("%s  %s\n%d:%d  %d\n", pStart->numero,
se usi %02d il formato risulta corretto.
Ciao
Riz

Riz
ok, grazie 1000 !
ciao