Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Aprire, leggere e stampare un file di testo con if a stringhe
Forum - C/C++ - Aprire, leggere e stampare un file di testo con if a stringhe

Avatar
zvengenz (Normal User)
Newbie


Messaggi: 5
Iscritto: 20/01/2014

Segnala al moderatore
Postato alle 14:00
Lunedì, 20/01/2014
Il codice che ho scritto è questo:
Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. main()
  6. {
  7.         char *immagine[1000];
  8.         FILE *stream;
  9.         char scelta[1000];
  10.         char frutto1[1000]="albicocca";
  11.         char frutto2[1000]="banana";
  12.         printf("Vuoi un'albicocca o una banana? ");
  13.         scanf("%s",&scelta);
  14.         if(strcmp(scelta,frutto1)==0)
  15.         {
  16.                 stream=fopen("albicocca.txt","r");
  17.                 fgets(immagine,1000,stream);
  18.                 printf("%s",immagine);
  19.                 fflush(stdin);
  20.                 fclose(stream);
  21.         }
  22.         else if(strcmp(scelta,frutto2)==0)
  23.         {
  24.                 stream=fopen("banana.txt","r");
  25.                 fgets(immagine,1000,stream);
  26.                 printf("%s",immagine);
  27.                 fflush(stdin);
  28.                 fclose(stream);
  29.         }
  30.         system("PAUSE");
  31.         return 0;
  32. }


Ma quando vado ad eseguirlo e a scrivere "albicocca" o "banana" non mi esce nulla, a volte due caratteri a caso (nei file di testo ci sono delle immagini in caratteri di un'albicocca e una banana) e il programma finisce. Uso Dev-C++, può essere per colpa di quello? Mi ricordo che con Visual Studio mi usciva ma non ne sono sicuro. Grazie in anticipo :)

Ultima modifica effettuata da zvengenz il 20/01/2014 alle 14:15
PM Quote
Avatar
dmr (Normal User)
Pro


Messaggi: 141
Iscritto: 04/01/2012

Segnala al moderatore
Postato alle 14:43
Lunedì, 20/01/2014
char immagine[1000]; ,non char *immagine[1000];
Comunque se vuoi stampare tutto il file, facendo solo fgets(immagine,1000,stream) non va bene , cosi stampi solo una riga.

Ultima modifica effettuata da dmr il 20/01/2014 alle 14:46


Principali interessi: Compilatori e generatori di parser.
PM Quote
Avatar
zvengenz (Normal User)
Newbie


Messaggi: 5
Iscritto: 20/01/2014

Segnala al moderatore
Postato alle 15:34
Lunedì, 20/01/2014
Ah grazie ecco, e come faccio a stamparlo tutto?

PM Quote
Avatar
dmr (Normal User)
Pro


Messaggi: 141
Iscritto: 04/01/2012

Segnala al moderatore
Postato alle 20:25
Lunedì, 20/01/2014
Per non andare a complicarti la vita, puoi fare semplicemente:
Codice sorgente - presumibilmente Plain Text

  1. while(fgets(immagine,1000,stream)!=NULL)
  2.      printf("%s",immagine);



Fai questo nei 2 if. La fgets restituisce il valore NULL quando ha finito di leggere il file.
Ah già che ci stò:  
Codice sorgente - presumibilmente Plain Text

  1. scanf("%s",&scelta);



La & non si mette perchè l'array scelta viene "interpretato" come se fosse un puntatore a 1000 caratteri.

Ultima modifica effettuata da dmr il 20/01/2014 alle 20:29


Principali interessi: Compilatori e generatori di parser.
PM Quote
Avatar
zvengenz (Normal User)
Newbie


Messaggi: 5
Iscritto: 20/01/2014

Segnala al moderatore
Postato alle 12:47
Martedì, 21/01/2014
Ho provato ma continua a leggere solo una riga. Soluzioni? :(

PM Quote
Avatar
dmr (Normal User)
Pro


Messaggi: 141
Iscritto: 04/01/2012

Segnala al moderatore
Postato alle 12:52
Martedì, 21/01/2014
Strano, puoi postare il sorgente modificato?


Principali interessi: Compilatori e generatori di parser.
PM Quote
Avatar
zvengenz (Normal User)
Newbie


Messaggi: 5
Iscritto: 20/01/2014

Segnala al moderatore
Postato alle 16:55
Martedì, 21/01/2014
Eccolo
Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. main()
  6. {
  7.         char immagine[1000];
  8.         FILE *stream;
  9.         char scelta[1000];
  10.         char frutto1[1000]="albicocca";
  11.         char frutto2[1000]="banana";
  12.         printf("Vuoi un'albicocca o una banana? ");
  13.         scanf("%s",scelta);
  14.         if(strcmp(scelta,frutto1)==0)
  15.         {
  16.                 stream=fopen("albicocca.txt","r");
  17.                 while(fgets(immagine,1000,stream)!=NULL)
  18.                 {
  19.                 printf("%s",immagine);
  20.                 fflush(stdin);
  21.                 fclose(stream);
  22.             }
  23.         }
  24.         else if(strcmp(scelta,frutto2)==0)
  25.         {
  26.                 stream=fopen("banana.txt","r");
  27.                 while(fgets(immagine,1000,stream)!=NULL)
  28.                 {
  29.                 printf("%s",immagine);
  30.                 fflush(stdin);
  31.                 fclose(stream);
  32.             }
  33.         }
  34.         system("PAUSE");
  35.         return 0;
  36. }


PM Quote
Avatar
dmr (Normal User)
Pro


Messaggi: 141
Iscritto: 04/01/2012

Segnala al moderatore
Postato alle 19:54
Martedì, 21/01/2014
fclose(stream); va fuori dal while.


Principali interessi: Compilatori e generatori di parser.
PM Quote
Avatar
zvengenz (Normal User)
Newbie


Messaggi: 5
Iscritto: 20/01/2014

Segnala al moderatore
Postato alle 14:48
Giovedì, 23/01/2014
Funziona, grazie

Ultima modifica effettuata da zvengenz il 23/01/2014 alle 14:48
PM Quote