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++ - Problemi scrittura su file e ciclo while in C (xCode)
Forum - C/C++ - Problemi scrittura su file e ciclo while in C (xCode)

Avatar
lollofabbri (Normal User)
Newbie


Messaggi: 3
Iscritto: 27/05/2012

Segnala al moderatore
Postato alle 15:03
Domenica, 27/05/2012
Ciao. Ho una serie di problemi con un piccolo programma che sto scrivendo per gestire le mie azioni. Il codice e':
Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int main(int argc, const char * argv[])
  5. {
  6.  
  7.     float x;
  8.     int i=0;
  9.     int f;
  10.     float investimento=0, investimento_tot=0;
  11.     char societa[20];
  12.     FILE * pFile;
  13.    
  14.    
  15.     pFile = fopen("Finanza.txt", "wb");
  16.     if (pFile == NULL) perror ("Error opening file");
  17.    
  18.     while (strcmp(societa, "fine")) {
  19.         printf("Digita il nome della compagnia: ");
  20.         scanf("%s", societa);
  21.        
  22.         printf("Inserire il prezzo per azione di %s: ", societa);
  23.         scanf("%f", &x);
  24.         printf("Inserire il numero di azioni: ");
  25.         scanf("%d", &f);
  26.        
  27.      
  28.         fprintf(pFile, "%s", societa);
  29.        
  30.        
  31.         investimento = x*f;
  32.         printf("Il tuo investimento in %s risulta essere: %f \n", societa, investimento);
  33.         investimento_tot = investimento_tot + investimento;
  34.        
  35.     }
  36.    
  37.     fclose(pFile);
  38.     printf("L'investimento totale risulta essere: %f \n", investimento_tot);
  39.     printf("Suddivisi in questo modo: %s \t %f \t %d", societa, f, x);
  40.    
  41.     fscanf(pFile, "%s", &societa);
  42.     printf("%s", societa);
  43.     return 0;
  44. }



Problemi:
1) Io vorrei che quando digito "fine" quando mi chiede il nome della società, il ciclo finisse e andasse al printf successivo. ma mi chiede il nome, digito fine, mi chiede il numero di azioni e il prezzo e poi esce. Ma comunque nell'investimento totale viene sommato anche il prezzo di fine.
2) Io ho messo nella cartella del progetto un documento .txt chiamato Finanza e vorrei che li venissero salvati i nomi e l'investimento di ciascuna compagnia ma quando lo vado ad aprire non c'e nulla. Come faccio?

Grazie e buona domenica.

PM Quote
Avatar
ale.gatti96 (Member)
Pro


Messaggi: 71
Iscritto: 29/11/2011

Segnala al moderatore
Postato alle 15:17
Domenica, 27/05/2012
Ciao, buona domenica anche a te.

1) Fai così:
Codice sorgente - presumibilmente C/C++

  1. while (1) {
  2.         printf("Digita il nome della compagnia: ");
  3.         scanf("%s", societa);
  4.        
  5.         if(!strcmp(societa, "fine"))
  6.           break;
  7.  
  8.         printf("Inserire il prezzo per azione di %s: ", societa);
  9.         scanf("%f", &x);
  10.         printf("Inserire il numero di azioni: ");
  11.         scanf("%d", &f);
  12.      
  13.         fprintf(pFile, "%s", societa);
  14.        
  15.         investimento = x*f;
  16.         printf("Il tuo investimento in %s risulta essere: %f \n", societa, investimento);
  17.         investimento_tot = investimento_tot + investimento;
  18.     }



2) Perchè lo apri in scrittura e quindi se c'era qualcosa nel file lo cancella; aprilo in append, così ti lasci quello che avevi scritto e aggiungi dopo le cose nuove:

Codice sorgente - presumibilmente Plain Text

  1. pFile = fopen("Finanza.txt", "a");



Ultima modifica effettuata da ale.gatti96 il 27/05/2012 alle 15:19
PM Quote
Avatar
lollofabbri (Normal User)
Newbie


Messaggi: 3
Iscritto: 27/05/2012

Segnala al moderatore
Postato alle 15:20
Domenica, 27/05/2012
Grazie! Ma c'e un altro problema.
Alla fine chiedo
Codice sorgente - presumibilmente C/C++

  1. printf("Suddivisi in questo modo: %s \t %f \t %d", societa, f, x);


E come risultato ottengo compagnia = fine e non quella che in realtà voglio...

E se apro il .txt comunque non c'e scritto nulla!

Ultima modifica effettuata da lollofabbri il 27/05/2012 alle 15:21
PM Quote
Avatar
ale.gatti96 (Member)
Pro


Messaggi: 71
Iscritto: 29/11/2011

Segnala al moderatore
Postato alle 15:25
Domenica, 27/05/2012
Prova a cancellare il file txt e riprova.
Poi dovresti dare nomi più significativi alle variabili, 'x' e 'f' non sono proprio il massimo.

PM Quote
Avatar
lollofabbri (Normal User)
Newbie


Messaggi: 3
Iscritto: 27/05/2012

Segnala al moderatore
Postato alle 15:28
Domenica, 27/05/2012
Ho eliminato tutti i file dalla cartella, ho creato con un programma un documento .txt e l'ho messo nella cartella del progetto ma niente, se lo riapro col programma non c'e nulla...

PM Quote
Avatar
ale.gatti96 (Member)
Pro


Messaggi: 71
Iscritto: 29/11/2011

Segnala al moderatore
Postato alle 15:30
Domenica, 27/05/2012
Ti stampa fine perché è quello il contenuto di società dopo il ciclo.
E poi non ha molto senso fare
Codice sorgente - presumibilmente C/C++

  1. printf("Suddivisi in questo modo: %s \t %f \t %d", societa, f, x);



Fai un ciclo dove stampi un resoconto di tutte le società e accumuli il totale, poi dopo lo stampi

PM Quote
Avatar
ale.gatti96 (Member)
Pro


Messaggi: 71
Iscritto: 29/11/2011

Segnala al moderatore
Postato alle 15:48
Domenica, 27/05/2012
Testo quotato

Postato originariamente da lollofabbri:
se lo riapro col programma non c'e nulla...  



Si perchè dopo il ciclo fai fclose(pFile) e dopo cerci di usare la fscanf su pFile.
Poi devi anche salvare i valori numerici nel file, non solo i nomi delle società!
Prova a fare così:
Codice sorgente - presumibilmente C/C++

  1. while (strcmp(societa, "fine")) {
  2.         printf("Digita il nome della compagnia: ");
  3.         scanf("%s", societa);
  4.         if(!strcmp(societa, "fine"))
  5.            break;
  6.  
  7.         printf("Inserire il prezzo per azione di %s: ", societa);
  8.         scanf("%f", &x);
  9.         printf("Inserire il numero di azioni: ");
  10.         scanf("%d", &f);
  11.         fprintf(pFile, "%s %f %d ", societa,x,f);
  12.        
  13.         investimento = x*f;
  14.         printf("Il tuo investimento in %s risulta essere: %f \n", societa, investimento);
  15.         investimento_tot = investimento_tot + investimento;
  16.     }
  17.    
  18.     printf("\n\nRiepilogo:\n");
  19.     while(!feof(fp)){
  20.       fscanf(pFile, "%s", &societa);
  21.       fscanf(pFile, "%f", &x);      
  22.       fscanf(pFile, "%d", &f);
  23.       printf(" %s \t %f \t %d\n", societa, f, x);
  24.       investimento_tot+=(x*f);
  25.     }
  26.     printf("Totale: %f", investimento_tot);
  27.  
  28.     fclose(pFile);
  29.     return 0;


Ultima modifica effettuata da ale.gatti96 il 27/05/2012 alle 15:52
PM Quote