Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Esercizio su file
Forum - C/C++ - Esercizio su file - Pagina 2

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 12:50
Lunedì, 08/02/2010
Testo quotato

Postato originariamente da wicca89:

Non lo so perchè ha risposto 4 volte io ho scritto solo una volta.



Continui a rispondere piu' volte ... fai un solo click sul "send" e attendi ...


Testo quotato

Cmq questa è una traccia di un'esame e ho copiato esattamente quello ke c'è scritto non so che dire...tralasciando la riga del numero di copie come lo concludo?



Non puoi tralasciare nulla perchè il programma si fa in un certo modo se ci sono scritte certe cose, o in un altro se ce ne sono scritte altre. Il testo dice

"Il primo rigo contiene il nome di un libro e dal numero di n copie del libro possedute dalla biblioteca"

Quindi dovrebbe essere, ad esempio

Analisi I 2
15000 NO
7658 SI

Geometria 2
9360 SI
782 SI

Programmare in c 2
6364 NO
11820 SI

Intelligenza artificiale 3
10933 NO
4563 NO
135 NO

In questo modo, sai quante righe devi leggere in seguito (e lo fai tramite un ciclo for, che manca nel tuo programma).

Quindi dovrai

1) leggere la prima linea (ti consiglio una fscanf in modo da separare i due dati, il titolo e il numero di copie)

2) se il libro è quello che cerchi (confrontando il titolo) allora esegui un ciclo for (da 0 a n-1) per leggere le altre informazioni

3) esamini le varie linee in input cercando il SI; se lo trovi, stampi la linea in questione e termini, altrimenti, se termina il ciclo senza aver trovato nulla, evidenzi un messaggio d'errore.


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
wicca89 (Normal User)
Rookie


Messaggi: 45
Iscritto: 16/01/2009

Segnala al moderatore
Postato alle 18:37
Lunedì, 08/02/2010
Ok ci sono quasi riuscita ho fatto questo:

Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4.  
  5.  
  6. int main () {
  7. FILE *fp;
  8.     char linea[256],carsi[256];
  9.     char *divlinea, *car_si, *space;
  10.     char libro[256];
  11.     int numvol;
  12.  
  13.    
  14.     printf("Dammi il nome del tomo da cercare: ");
  15.     gets(libro);
  16.    
  17.     fp=fopen("biblio.txt","r");
  18.    
  19.         if(fp!=NULL)    {
  20.        while(!feof(fp)){
  21.                         fgets(linea, 256, fp);
  22.                         if(strstr(linea,libro)!=NULL) {
  23.                                                        printf("%s",linea);
  24.                                                        divlinea=(strchr(linea,'^'));
  25.                                                        numvol=atoi(divlinea+1);//uguale al carattere dopo il ^
  26.                                                        fgets(carsi, 256, fp);
  27.                                                        space = strchr(carsi, ' ');
  28.                                                        if(strstr(carsi, "SI")){
  29.                                                                        
  30.                                                        printf("%s",carsi);
  31.                                                        }
  32.                                                        }
  33.                                                        }
  34.                                                        }      
  35.     else
  36.       printf("Impossibile leggere il file\n");
  37.  
  38.     fclose(fp);
  39.  
  40. system("PAUSE");
  41. return 0;
  42.             }



ho fatto il mio biblio.txt in qst modo:
Analisi I^2
15000 NO
7658 SI

Geometria^2
9360 SI
782 SI

Programmare in c^2
6364 NO
11820 SI

Intelligenza artificiale^3
10933 NO
4563 NO
135 NO

Quindi se faccio:
Input:
Geometria

output:
Geometria^2
9360 SI
mi date una mano per stampare anche l'altro si xk mi controlla solo la prima riga per lo meno spiegatemi come devo muovermi!:hail: grazie in anticipo

PM Quote
Avatar
wicca89 (Normal User)
Rookie


Messaggi: 45
Iscritto: 16/01/2009

Segnala al moderatore
Postato alle 19:13
Lunedì, 08/02/2010
Mi manca un else!!!

Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4.  
  5.  
  6. int main () {
  7. FILE *fp;
  8.     char linea[256],carsi[256];
  9.     char *divlinea, *car_si, *space;
  10.     char libro[256];
  11.     int numvol,a=0;
  12.  
  13.    
  14.     printf("Dammi il nome del tomo da cercare: ");
  15.     gets(libro);
  16.    
  17.     fp=fopen("biblio.txt","r");
  18.    
  19.         if(fp!=NULL)    {
  20.        while(!feof(fp)){
  21.                         fgets(linea, 256, fp);
  22.                         if(strstr(linea,libro)!=NULL) {
  23.                                                        printf("%s",linea);
  24.                                                        divlinea=(strchr(linea,'^'));
  25.                                                        numvol=atoi(divlinea+1);//uguale al carattere dopo il ^
  26.                                                        while(a<=numvol){
  27.                                                        fgets(carsi, 256, fp);
  28.                                                        space = strchr(carsi, ' ');
  29.                                                        a++;
  30.                                                        if(strstr(carsi, "SI")){
  31.                                                           printf("%s",carsi);
  32.                                                                              
  33.                                                              }
  34.                                                        
  35.                                                        }
  36.                                                        }
  37.                                                        }      
  38.     else
  39.       printf("Impossibile leggere il file\n");
  40.  
  41.     fclose(fp);
  42.  
  43. system("PAUSE");
  44. return 0;
  45.             }


Mi stampa tt bene l'unico problema come dicevo è l'else vorrei mettere un:

Codice sorgente - presumibilmente C/C++

  1. if(strstr(carsi, "SI")){
  2.                                printf("%s",carsi);
  3.                                                   }
  4.       else
  5.            printf("Nessun tomo disponibile.\n");


Me lo stampa anche se trova i si... aiutatemi pleaseeeee

PM Quote
Avatar
wicca89 (Normal User)
Rookie


Messaggi: 45
Iscritto: 16/01/2009

Segnala al moderatore
Postato alle 15:05
Martedì, 09/02/2010
nn c'è nessuno ad aiutarmiii :hail::hail::hail::hail::hail::hail::hail::(:(:(

PM Quote
Avatar
wicca89 (Normal User)
Rookie


Messaggi: 45
Iscritto: 16/01/2009

Segnala al moderatore
Postato alle 15:56
Martedì, 09/02/2010
Grazie cmq a tutti sono riuscita da solo mettendo un int control=0 e ponendolo a 1 se trova si altrimenti se rimane 0 stampa k nn c sn libri disponibili
Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4.  
  5.  
  6. int main () {
  7. FILE *fp;
  8.     char linea[256],carsi[256];
  9.     char *divlinea, *car_si, *space;
  10.     char libro[256];
  11.     int numvol,a=0,control=0;
  12.  
  13.    
  14.     printf("Dammi il nome del tomo da cercare: ");
  15.     gets(libro);
  16.    
  17.     fp=fopen("biblio.txt","r");
  18.    
  19.     if(fp!=NULL) {
  20.        while(!feof(fp)){
  21.                         fgets(linea, 256, fp);
  22.                         if(strstr(linea,libro)!=NULL) {
  23.                                                        printf("%s",linea);
  24.                                                        divlinea=(strchr(linea,'^'));
  25.                                                        numvol=atoi(divlinea+1);//uguale al carattere dopo il ^
  26.                                                        while(a<=numvol){
  27.                                                        fgets(carsi, 256, fp);
  28.                                                        space = strchr(carsi, ' ');
  29.                                                        a++;
  30.                                                        if(strstr(carsi, "SI")){
  31.                                                                         printf("%s",carsi);
  32.                                                                         control=1;
  33.                                                                                             }
  34.                                                        
  35.                                                              }
  36.                                                        if(control==0){
  37.                                                                        printf("Nessun libro disponibile.\n");
  38.                                                                        }
  39.                                                                }
  40.                                                                }
  41.                                                        }
  42.                                                              
  43.     fclose(fp);
  44.  
  45. system("PAUSE");
  46. return 0;
  47.             }



PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo