Lettura file di un database

di il
50 risposte

50 Risposte - Pagina 3

  • Re: Lettura file di un database

    [Code ]#include <stdio.h> #include <stdlib.h> #include <string.h> int main(int argc, char *argv[]) { char parole[50]; int i=0; char nome[50], sala[50], orario[50], posti[50], prezzo[50]; FILE *fp; fp=fopen("programmazione.db", "r"); if(fp==NULL) { printf("Impossibile aprire il file\n"); exit(0); } sscanf(parole, "%s %s %s %s %s", nome, sala, orario, posti, prezzo); if(argc==2) { while(!feof(fp)) { fgets(parole, 50, fp); if(!strcmp(orario, argv[1])) printf("%s\n", parole); } } if(argc==3) { while(!feof(fp)) { fgets(parole, 50, fp); if( atof(prezzo) < atof (argv[2]) ) printf("%s\n", parole); } } else { printf("Inserire almeno un parametro\n"); } fclose(fp); return 0; } [\code]
  • Re: Lettura file di un database

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main(int argc, char *argv[])
    {
       char parole[50];
       int i=0;
       char nome[50], sala[50], orario[50], posti[50], prezzo[50];
       
       
       FILE *fp;
    
       fp=fopen("programmazione.db", "r");
    
       if(fp==NULL)
       {
          printf("Impossibile aprire il file\n");
          exit(0);
       }
    
       sscanf(parole, "%s %s %s %s %s", nome, sala, orario, posti, prezzo);
    
       if(argc==2)
       {
       
          while(!feof(fp))
          {
            fgets(parole, 50, fp);
            
    
            if(!strcmp(orario, argv[1]))
              printf("%s\n", parole);
          }
       }
       if(argc==3)
       {
          while(!feof(fp))
          {
    	fgets(parole, 50, fp);
    
    	if( atof(prezzo) <  atof (argv[2]) )
    	  printf("%s\n", parole);
          }
       }
       else
       {
          printf("Inserire almeno un parametro\n");
       }
    
       fclose(fp);
    
     return 0;
    }
    
  • Re: Lettura file di un database

    La sscanf va fatta NEI ciclo DOPO la fgets!

    Prima leggi la linea dal file e dopo prendi le parti. Il contrario che senso ha?
  • Re: Lettura file di un database

    Hai pienamente ragione oregon ora funziona. ultima cosa nel caso argc contiene 3 elementi deve stamparmi tutti i record che contengono un prezzo inferiore a quello inserito e che ci siano posti disponibili in sala quindi devo usare l'operatore logico and ho scritto cosi però mi da errore quando vado a compilare perchè?
    
    if(argc==3)
       {
          while(!feof(fp))
          {
    	fgets(parole, 50, fp);
            sscanf(parole, "%s %s %s %s %s", nome, sala, orario, posti, prezzo);
    	if( atof(prezzo) <  atof (argv[2]) && (int)posti>0)
    	  printf("%s\n", parole);
          }
    
  • Re: Lettura file di un database

    Di nuovo?

    posti è una stringa e va trasformata in numero !

    E non dimenticare che il testo chiedeva un'altra cosa
  • Re: Lettura file di un database

    Con 2 parametri, prende in input da linea di comando il titolo di un film ed un prezzo massimo che l’utente è disposto a pagare per vedere il film. Il programma, esaminando il database programmazione.db,/stampa le informazioni (titolo, sala, orario, posti disponibili e prezzo) relative a tutte le proiezioni del film per le quali il prezzo del biglietto è minore del prezzo massimo specificato sempre a condizione che ci siano ancora posti disponibili.

    giustamente è una stringa quindi devo usare atoi però scrivendo atoi(posti)>0 comunque non funziona
  • Re: Lettura file di un database

    Non funziona ... Cioè? Che succede?
  • Re: Lettura file di un database

    Niente avevo sbagliato nella prima fgets non so perchè ma avevo scritto fgets(fp, 50 fp) ho risolto grazie mille oregon te ne sono immensamente grato...
    ultima domanda e la smetto giuro per fare questo esercizio devo creare una struttura altrimenti non posso verificare le temperature massime e minime di ogni riga giusto?

    Scrivere un programma temperature che dato un database che
    memorizza le temperature minime e massime registrate in alcune città italiane ed in vari
    giorni permetta di interrogare il database fornendo le seguenti informazioni:
    1. se lanciato senza parametri, fornisce la temperatura minima e la temperatura massima
    in assoluto (tutte le città tutti i giorni), unitamente al giorno ed alla città in cui sono state
    registrate.
    2. se lanciato con una data fornisce la temperatura minima e massima relativamente al
    giorno specificato (quindi su tutte le città), unitamente alla città in cui sono state
    registrate.
    3. se lanciato con un nome di città, fornisce la temperatura minima e quella massima
    relativamente a quella città (quindi su tutte le date), unitamente al giorno in cui sono state
    registrate.
    Si assuma che il database delle temperature sia memorizzato in un file il cui nome è
    temperature.db)e che il file contenga le informazioni di ogni singola città e giorno nel
    formato data, città, temperature minima e temperatura massima, con spazi che separano i
    campi. Le date sono specificate nel formato dd/mm/aaaa. I nomi di città non contengono
    spazi.
  • Re: Lettura file di un database

    Per altri problemi devi creare un nuovo thread.

    Ma tornando a noi, ancora non hai completato il programma attuale !

    Manca il confronto con il titolo del film !
  • Re: Lettura file di un database

    Scusami non lo sapevo.
    perchè è sbagliato il confronto? atof non trasforma una stringa in un float? io non ho considerato il titolo del film perchè se inserisco ./a.out rambo 7.50 il programma mi stampa tutti i film con un prezzo minore di quello inserito in input e con posti in sala ancora disponibili
  • Re: Lettura file di un database

    Il testo dell'esercizio dice di trovare un film dal titolo specifico. Se non lo cerchi, non stai risolvendo l'esercizio, quindi voto negativo.

    EDIT: il confronto è corretto, lascia perdere, quello che manca è il confronto del titolo. Il titolo che inserisci da tastiere deve essere scritto con maiuscole e minuscole uguali a quelle memorizzate, se usi la strcmp
  • Re: Lettura file di un database

    
    While(!feof(fp))
          {
    	fgets(parole, 50, fp);
            sscanf(parole, "%s %s %s %s %s", nome, sala, orario, posti, prezzo);
    	if(!strcmp(argv[1], nome)){
    	  if( atof(prezzo) < atof(argv[2]) && atoi(posti)>0)
    	     printf("%s\n", parole);
              }
    	}
    
    ora ho scritto cosi per il controllo del nome, però non capisco l'errore del < la traccia mi chiede che il prezzo deve essere inferiore al quello inserito in input

    e se compilo cosi: ./a.out Rambo 6.00 mi stampa cosi
    Rambo 3 18:30 50 5.50

    Rambo 3 22:30 23 5.50

    Rambo 3 22:30 23 5.50

  • Re: Lettura file di un database

    No ... rileggi le correzioni, il confronto del prezzo è corretto, va bene così.

    L'ultima linea è duplicata perché nel file di testo hai dato un invio dopo l'ultima linea creando una linea vuota.
    Apri l'editor ed elimina questo ritorno a capo.

    Puoi usare la funzione strcmpi per fare il confronto ignorando le maiuscole/minuscole.
    Puoi scrivrre il confronto in una sola if

    if(strcmpi(argv[1], nome)==0 && atof(prezzo)<atof(argv[2]) && atoi(posti)>0)
  • Re: Lettura file di un database

    Non c'è nessuna linea vuota nel file di testo. Grazie per la strcmpi
  • Re: Lettura file di un database

    C'è un "ritorno a capo" nell'ultima linea. Toglilo
Devi accedere o registrarti per scrivere nel forum
50 risposte