Oppure

Loading
28/12/11 11:48
904
Salve non riesco col seguente programma non stampa quello che dovrebbe stampare!

/*  Corso di laurea:    Ingegneria Informatica
*   Esame:              Fondamenti di Informatica 
*   Prova scritta del:  23 gennaio 2006
*
*   Si scriva un programma che soddisfi le seguenti specifiche:
*       - carica da un file di testo un elenco di modelli di autovetture; per 
*         ogni modello di autovettura le informazioni sono: marca, modello e
*         prezzo 
*       - visualizza a video l'elenco caricato; 
*       - ordina l'elenco in base alla marca e quindi al modello;
*       - visualizza a video l'elenco ordinato;
*       - elimina record duplicati nell'elenco: due o più record sono da 
*         considerarsi duplicati se coincidono tutti e tre i relativi campi; 
*         nel caso vengano rilevati dati duplicati il programma elimina tutte 
*         le copie del dato tranne una;
*       - visualizza a video l'elenco
*       - salva in un file l'elenco rispettando la sintassi del file riportata 
*         in basso nelle ulteriori specifiche
*
*   Ulteriori specifiche:  
*       - il file di testo contentente l'elenco è strutturato come segue:
*         la prima riga contiene un numero intero che rappresenta quanti record
*         sono presenti nell'elenco salvato su file;
*         su ogni riga c'è un record riportato secondo la seguente sintassi:
*         !Campo_Marca!Campo_Modello!Campo_Prezzo!
*       - la dimensione massima dell'elenco gestito è pari a 100
*       - oltre al main si scrivano funzioni per effettuare le operazioni di:
*          -> caricamento dell'elenco da file
*          -> ordinamento dell'elenco mediante algoritmo di bubble sort
*          -> elimina i record duplicati nell'elenco
*          -> visualizzazione a video dell'elenco
*          -> salvataggio elenco su file
*
*    Altro:
*       - per maggiore chiarezza è stato allegato al presente compito un file di 
*         input di esempio ("auto.txt")
*/
 
#include <stdio.h>
#include <stdlib.h>
#define MAX 100
int carica(char marca[][MAX],char modello[][MAX],float prezzo[][MAX]);
void stampa(char marca[][MAX],char modello[][MAX],float prezzo[][MAX],int rec);
int main()
{
    int rec,i;
    char marca[MAX][MAX],modello[MAX][MAX];
    float prezzo[MAX][MAX];
    rec=carica(marca,modello,prezzo);
    stampa(marca,modello,prezzo,rec);
 
      system("PAUSE");
      return 0;
      
}
int carica(char marca[][MAX],char modello[][MAX],float prezzo[][MAX])
{
     int rec,i;
     FILE *autom;
     char nome[MAX];
     printf("Inserisci il nome del file da aprire:\n");
     scanf("%s", nome);
     autom=fopen(nome,"r");
     if(autom==NULL)
     {
         printf("Errore nell'apertura del file\n");
         system("pause");
         exit(1);
     }
     fscanf(autom,"%d", &rec);
     for(i=0;i<rec;++i)
         fscanf(autom,"!%s!%s!%s!", marca[i],modello[i],prezzo[i]);
     return rec;
}     
void stampa(char marca[][MAX],char modello[][MAX],float prezzo[][MAX],int rec)
{
     int i;
     printf("\tMARCA\tMODELLO\tPREZZO\n");
     for(i=0;i<rec;++i)
         printf("\t%s\t%s\t%f\n",marca[i],modello[i],prezzo[i] );
}
aaa
28/12/11 12:21
Nullable
Attento, guarda che marca, modello e prezzo sono array multidimensionali. Quando richiami printf logicamente stampi solo una parte dell'array.
aaa
28/12/11 12:27
tasx
così funge ;)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 100

int carica(char **marca,char **modello,float *prezzo)
{
    int rec,i;
    FILE *autom;
    char nome[MAX];
    printf("Inserisci il nome del file da aprire:\n");
    scanf("%s", nome);
    autom=fopen(nome,"r");
    if(autom==NULL)
    {
        printf("Errore nell'apertura del file\n");
        system("pause");
        exit(1);
    }
    fscanf(autom,"%d", &rec);
    printf("Trovati %d record\n", rec);
    char *t = malloc(sizeof(char) * 1024);
    for(i=0;i<rec;++i)
	{	
		marca[i] = malloc(sizeof(char) * MAX);
		modello[i] = malloc(sizeof(char) * MAX);
		fscanf(autom, "%s\n", t);
		marca[i] = strdup(strtok(t, "!"));
		modello[i] = strdup(strtok(NULL, "!"));
		prezzo[i] = atof(strtok(NULL, "!"));
        /* fscanf(autom,"!%s!%s!%s!", marca[i],modello[i],prezzo[i]); */
		printf("marca trovata: %s\n", marca[i]);
		memset(t, 0, 1024);
	}
    free(t);
    return rec;
}    
void stampa(char **marca,char **modello,float *prezzo,int rec)
{
     int i;
     printf("\tMARCA\tMODELLO\tPREZZO\n");
     for(i=0;i<rec;++i)
         printf("\t%s\t%s\t%f\n",marca[i],modello[i],prezzo[i] );
}

int main()
{
    int rec,i;
    char **marca,**modello;
    float *prezzo;
    marca = malloc(sizeof(char*) * MAX);
    modello = malloc(sizeof(char*) * MAX);
	prezzo = malloc(sizeof(float) * MAX);
    rec=carica(marca,modello,prezzo);
    stampa(marca,modello,prezzo,rec);
 
      system("PAUSE");
      return 0;
     
}


manca molta roba, ma il suo dovere lo fà ;)

ciaociao
aaa