Programma stringhe [C]

di il
9 risposte

Programma stringhe [C]

Salve non funziona il seguente programma non stampa quello che dovrebbe stampare potete aiutarmi?
/*  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] );
}

9 Risposte

  • Re: Programma stringhe [C]

    Prezzo è un array di float non un array di stringhe. cambia la formattazione di fscanf.
  • Re: Programma stringhe [C]

    Sisi vabbè metto %f ma non cambia niente lo stesso non funziona!
  • Re: Programma stringhe [C]

    Ne sei sicuro?
    
    fscanf(autom,"!%s!%s!%f!", marca[i],modello[i],&prezzo[i]);
    
  • Re: Programma stringhe [C]

    In che senso? sono sicuro di aver sbagliato xd perchè non funziona comunque quella funzione mi serve che deve prendere nel file che l'utente inserisce da tastiera in questo file ci sono i campi disposti in questo modo :
    !Opel!Astra!18000.00!
    !Fiat!Punto!13500.00!
    !Audi!A4!32000.00!
    !Renault!Megane!22999.99!
    !Fiat!Punto!13500.00!
    !Opel!Corsa!12300.00!
    !Alfa Romeo!147!29999.99!
    !

    Non sono sicuro di quella funzione non so come far capire alla scanf che deve prendere solo quello compreso tra ! e ! come posso fare?
  • Re: Programma stringhe [C]

    Questo esame ha quasi 6 anni, é scritto col kulo e non insegna niente.
    Il tracciato file identifica un docente ignorante e perverso.

    Oltre alle risposte che ti hanno dato negli altri due forum ti consiglio di leggerti questa parte moooolto attentamente perché cosí gli fai capire quanto sono idioti!
    http://beej.us/guide/bgc/output/html/multipage/scanf.html

    Questo é un grande aiuto, altro non ti dico
  • Re: Programma stringhe [C]

    ixamit ha scritto:


    Questo esame ha quasi 6 anni, é scritto col kulo e non insegna niente.
    Il tracciato file identifica un docente ignorante e perverso.

    Oltre alle risposte che ti hanno dato negli altri due forum ti consiglio di leggerti questa parte moooolto attentamente perché cosí gli fai capire quanto sono idioti!
    http://beej.us/guide/bgc/output/html/multipage/scanf.html

    Questo é un grande aiuto, altro non ti dico
    Mitico!!
  • Re: Programma stringhe [C]

    Significa che il programma non è fattibile?
  • Re: Programma stringhe [C]

    Cavolo, ma leggete o no?
    ---cut---
    %[
    This is about the weirdest format specifier there is. It allows you to specify a set of characters to be stored away (likely in an array of chars). Conversion stops when a character that is not in the set is matched.

    For example, %[0-9] means "match all numbers zero through nine." And %[AD-G34] means "match A, D through G, 3, or 4".

    Now, to convolute matters, you can tell scanf() to match characters that are not in the set by putting a caret (^) directly after the %[ and following it with the set, like this: %[^A-C], which means "match all characters that are not A through C."

    To match a close square bracket, make it the first character in the set, like this: %[]A-C] or %[^]A-C]. (I added the "A-C" just so it was clear that the "]" was first in the set.)

    To match a hyphen, make it the last character in the set: %[A-C-].

    So if we wanted to match all letters except "%", "^", "]", "B", "C", "D", "E", and "-", we could use this format string: %[^]%^B-E-].

    So those are the basics! Phew! There's a lot of stuff to know, but, like I said, a few of these format specifiers are common, and the others are pretty rare.

    Got it? Now we can go onto the next--no wait! There's more! Yes, still more to know about scanf(). Does it never end? Try to imagine how I feel writing about it!
    ---cut---
    Example:
    
    int a;
    long int b;
    unsigned int c;
    float d;
    double e;
    long double f;
    char s[100];
    
    scanf("%d", &a);  // store an int
    scanf(" %d", &a); // eat any whitespace, then store an int
    scanf("%s", s); // store a string
    scanf("%Lf", &f); // store a long double
    
    // store an unsigned, read all whitespace, then store a long int:
    scanf("%u %ld", &c, &b);
    
    // store an int, read whitespace, read "blendo", read whitespace,
    // and store a float:
    scanf("%d blendo %f", &a, &d);
    
    // read all whitespace, then store all characters up to a newline
    scanf(" %[^\n]", s);
    
    // store a float, read (and ignore) an int, then store a double:
    scanf("%f %*d %lf", &d, &e);
    
    // store 10 characters:
    scanf("%10c", s);
    
  • Re: Programma stringhe [C]

    Io ti consiglierei, se proprio devi usare la fscanf, di leggere prima la stringa in una variabile, ad esempio 'tempS':
    
    fscanf(autom,"%s",tempS);
    
    poi utilizzare la funzione strtok() per separare la stringa ottenuta in più substringhe attraverso un separatore, in questo caso '!' come ad esempio:
    
    char* pS = strtok (tempS,"!"); //divide prima la stringa in sottostringhe
    strcpy(marca[i],pS);
    pS = strtok (NULL, "!");
    strcpy(modello[i],pS);
    pS = strtok (NULL, "!");
    prezzo[i]=(float)atof(pS);
    
Devi accedere o registrarti per scrivere nel forum
9 risposte