Oppure

Loading
08/02/10 11:32
wicca89
Non lo so perchè ha risposto 4 volte io ho scritto solo una volta.
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?
fseek ho provato ad usarlo perchè solo in questo modo che ho provato per non farmi stampare null se sapevo come completare l'esercizio non avrei aperto il post.
aaa
08/02/10 11:50
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 ...


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.
08/02/10 17:37
wicca89
Ok ci sono quasi riuscita ho fatto questo:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>


int main () {
FILE *fp;
    char linea[256],carsi[256];
    char *divlinea, *car_si, *space;
    char libro[256];
    int numvol;

    
    printf("Dammi il nome del tomo da cercare: ");
    gets(libro);
    
    fp=fopen("biblio.txt","r");
    
        if(fp!=NULL)    {
       while(!feof(fp)){
                        fgets(linea, 256, fp);
                        if(strstr(linea,libro)!=NULL) {
                                                       printf("%s",linea); 
                                                       divlinea=(strchr(linea,'^'));
                                                       numvol=atoi(divlinea+1);//uguale al carattere dopo il ^
                                                       fgets(carsi, 256, fp);
                                                       space = strchr(carsi, ' ');
                                                       if(strstr(carsi, "SI")){ 
                                                                       
                                                       printf("%s",carsi);
                                                       }
                                                       }
                                                       }
                                                       }       
    else
      printf("Impossibile leggere il file\n"); 

    fclose(fp);

system("PAUSE");
return 0;
            }


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
aaa
08/02/10 18:13
wicca89
Mi manca un else!!!

#include <stdio.h>
#include <string.h>
#include <stdlib.h>


int main () {
FILE *fp;
    char linea[256],carsi[256];
    char *divlinea, *car_si, *space;
    char libro[256];
    int numvol,a=0;

    
    printf("Dammi il nome del tomo da cercare: ");
    gets(libro);
    
    fp=fopen("biblio.txt","r");
    
        if(fp!=NULL)    {
       while(!feof(fp)){
                        fgets(linea, 256, fp);
                        if(strstr(linea,libro)!=NULL) {
                                                       printf("%s",linea); 
                                                       divlinea=(strchr(linea,'^'));
                                                       numvol=atoi(divlinea+1);//uguale al carattere dopo il ^
                                                       while(a<=numvol){
                                                       fgets(carsi, 256, fp);
                                                       space = strchr(carsi, ' ');
                                                       a++;
                                                       if(strstr(carsi, "SI")){ 
                                                          printf("%s",carsi);
                                                                              
                                                             }
                                                       
                                                       }
                                                       }
                                                       }       
    else
      printf("Impossibile leggere il file\n"); 

    fclose(fp);

system("PAUSE");
return 0;
            }

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

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

Me lo stampa anche se trova i si... aiutatemi pleaseeeee
aaa
09/02/10 14:05
wicca89
nn c'è nessuno ad aiutarmiii :hail::hail::hail::hail::hail::hail::hail::(:(:(
aaa
09/02/10 14:56
wicca89
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
#include <stdio.h>
#include <string.h>
#include <stdlib.h>


int main () {
FILE *fp;
    char linea[256],carsi[256];
    char *divlinea, *car_si, *space;
    char libro[256];
    int numvol,a=0,control=0;

    
    printf("Dammi il nome del tomo da cercare: ");
    gets(libro);
    
    fp=fopen("biblio.txt","r");
    
    if(fp!=NULL) {
       while(!feof(fp)){
                        fgets(linea, 256, fp);
                        if(strstr(linea,libro)!=NULL) {
                                                       printf("%s",linea); 
                                                       divlinea=(strchr(linea,'^'));
                                                       numvol=atoi(divlinea+1);//uguale al carattere dopo il ^
                                                       while(a<=numvol){
                                                       fgets(carsi, 256, fp);
                                                       space = strchr(carsi, ' ');
                                                       a++;
                                                       if(strstr(carsi, "SI")){ 
                                                                        printf("%s",carsi);
                                                                        control=1;
                                                                                            }
                                                       
                                                             }
                                                       if(control==0){
                                                                       printf("Nessun libro disponibile.\n");
                                                                       }
                                                               }
                                                               }
                                                       }
                                                             
    fclose(fp);

system("PAUSE");
return 0;
            }

aaa