Oppure

Loading
27/05/12 13:03
lollofabbri
Ciao. Ho una serie di problemi con un piccolo programma che sto scrivendo per gestire le mie azioni. Il codice e':
#include <stdio.h>
#include <string.h>

int main(int argc, const char * argv[])
{

    float x;
    int i=0;
    int f;
    float investimento=0, investimento_tot=0;
    char societa[20];
    FILE * pFile;
    
    
    pFile = fopen("Finanza.txt", "wb");
    if (pFile == NULL) perror ("Error opening file");
    
    while (strcmp(societa, "fine")) {
        printf("Digita il nome della compagnia: ");
        scanf("%s", societa);
        
        printf("Inserire il prezzo per azione di %s: ", societa);
        scanf("%f", &x);
        printf("Inserire il numero di azioni: ");
        scanf("%d", &f);
        
      
        fprintf(pFile, "%s", societa);
        
        
        investimento = x*f;
        printf("Il tuo investimento in %s risulta essere: %f \n", societa, investimento);
        investimento_tot = investimento_tot + investimento; 
        
    }
    
    fclose(pFile);
    printf("L'investimento totale risulta essere: %f \n", investimento_tot);
    printf("Suddivisi in questo modo: %s \t %f \t %d", societa, f, x);
    
    fscanf(pFile, "%s", &societa);
    printf("%s", societa);
    return 0;
}




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.
aaa
27/05/12 13:17
ale.gatti96
Ciao, buona domenica anche a te.

1) Fai così:
while (1) {
        printf("Digita il nome della compagnia: ");
        scanf("%s", societa);
       
        if(!strcmp(societa, "fine"))
          break;

        printf("Inserire il prezzo per azione di %s: ", societa);
        scanf("%f", &x);
        printf("Inserire il numero di azioni: ");
        scanf("%d", &f);
     
        fprintf(pFile, "%s", societa);
       
        investimento = x*f;
        printf("Il tuo investimento in %s risulta essere: %f \n", societa, investimento);
        investimento_tot = investimento_tot + investimento;
    }


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:

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

Ultima modifica effettuata da ale.gatti96 27/05/12 13:19
aaa
27/05/12 13:20
lollofabbri
Grazie! Ma c'e un altro problema.
Alla fine chiedo
 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 27/05/12 13:21
aaa
27/05/12 13:25
ale.gatti96
Prova a cancellare il file txt e riprova.
Poi dovresti dare nomi più significativi alle variabili, 'x' e 'f' non sono proprio il massimo.
aaa
27/05/12 13:28
lollofabbri
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...
aaa
27/05/12 13:30
ale.gatti96
Ti stampa fine perché è quello il contenuto di società dopo il ciclo.
E poi non ha molto senso fare
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
aaa
27/05/12 13:48
ale.gatti96
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ì:
while (strcmp(societa, "fine")) {
        printf("Digita il nome della compagnia: ");
        scanf("%s", societa);
        if(!strcmp(societa, "fine"))
           break;

        printf("Inserire il prezzo per azione di %s: ", societa);
        scanf("%f", &x);
        printf("Inserire il numero di azioni: ");
        scanf("%d", &f);
        fprintf(pFile, "%s %f %d ", societa,x,f);
       
        investimento = x*f;
        printf("Il tuo investimento in %s risulta essere: %f \n", societa, investimento);
        investimento_tot = investimento_tot + investimento;
    }
    
    printf("\n\nRiepilogo:\n");
    while(!feof(fp)){
      fscanf(pFile, "%s", &societa);
      fscanf(pFile, "%f", &x);      
      fscanf(pFile, "%d", &f);
      printf(" %s \t %f \t %d\n", societa, f, x);
      investimento_tot+=(x*f);
    }
    printf("Totale: %f", investimento_tot);

    fclose(pFile);
    return 0;
Ultima modifica effettuata da ale.gatti96 27/05/12 13:52
aaa