Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    84

    [C] Problema con i file

    Salve, studiando i file in C ho avuto un piccolo problema. Per esempio ho un semplice programma che fa la media di n numeri e voglio scrivere i risultati su file. Ho inserito alla fine del programma le seguente istruzioni

    FILE *pf = fopen ("REPORT.txt", "a+");
    if (pf == NULL)
    return 1;

    fprintf(pf, "MEDIA: %f\n\n", media);
    fprintf(pf, "MAX: %f\n\n", max);
    fprintf(pf, "MIN: %f\n\n\n", min);
    fclose(pf);
    return 0;

    Essendo nella main le istruzioni return mi fanno uscire dal programma nonostante ci fosse un ciclo while infinito. I risultati però vengono scritti sul file come sperato. Visto che io avevo in mente un'applicazione che si ripete infinite volte e ad ogni ciclo aggiunge risultati al file ho pensato ad una funzione che ogni volta chiamata mi potesse aggiungere al file REPORT.txt i nuovi risultati usando l'accesso "a+" cioè scrivendo in append e creando il file se non ci fosse.

    int stampa_su_file(float media, float max, float min)
    {
    FILE *pf = fopen ("REPORT.txt", "a+");
    if (pf == NULL)
    return 1;

    fprintf(pf, "MEDIA: %f\n\n", media);
    fprintf(pf, "MAX: %f\n\n", max);
    fprintf(pf, "MIN: %f\n\n\n", min);
    fclose(pf);
    return 0;
    }

    Passando media, max e min alla funzione ad ogni ciclo me le dovrebbe scrivere su file ma il file non viene creato. Il programma questa volta continua infinite volte ma il file non viene creato. Come faccio ad avere un file nel quale vengono aggiunti risultati ad ogni ciclo per infinite volte?

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Facci vedere il codice del main ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    84
    Ecco il programma completo:


    #include <stdio.h>

    int stampa_su_file(float a, float b, float c); /* Funzione prototipo */

    int main() /* Programma per fare la media di un numero indefinito di valori */
    {
    int n, count=1;
    float x, media, somma=0, max, min;

    printf("Benvenuto!");

    while(n!=EOF)
    {
    printf("\n\nDi quanti numeri desideri fare la media? (Inserire 0 per terminare il programma)");
    scanf("%d", &n);
    if(n==0)
    return 1;
    printf("\nNumero %d: ", count);
    scanf("%f", &x);
    somma += x;
    max = x;
    min = x;

    for(count=2; count <= n; ++count)
    {
    printf("\nNumero %d: ", count);
    scanf("%f", &x);
    somma += x;

    if (x>max)
    max=x;
    else if (x<min)
    min=x;

    }

    media= somma/n;

    printf("\n\nMEDIA: %f", media);
    printf("\nMAX: %f", max);
    printf("\nMIN: %f", min);

    count=1;
    somma=0;

    int stampa_su_file(float media, float max, float min); /* Chiamata funzione */
    }
    }


    int stampa_su_file(float a, float b, float c) /* Funzione per stampare su file */
    {
    FILE *pf = fopen ("REPORT.txt", "a+");
    if (pf == NULL)
    return 1;

    fprintf(pf, "MEDIA: %f\n\n", a);
    fprintf(pf, "MAX: %f\n\n", b);
    fprintf(pf, "MIN: %f\n\n\n", c);

    fclose(pf);
    return 0;
    }

  4. #4
    Originariamente inviato da luci89
    Ecco il programma completo:

    codice:
    int stampa_su_file(float media, float max, float min); /* Chiamata funzione */
    Falso. E' la dichiarazione della funzione "stampa_su_file", non la sua chiamata.

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    84
    Come non è la chiamata? Gli sto inviando i valori media, max e min... Comunque sia il problema non è questo... Perchè non mi crea il file? Che errore c'è?

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    MacApp ti ha detto che non si chiama in quel modo la funzione ... e il problema che hai deriva proprio da quello che hai scritto ...

    Quella che hai scritto all'interno del main e' la dichiarazione (come hai scritto in testa) ... la chiamata deve essere

    stampa_su_file(media, max, min);
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    84
    Vero!! Ho sbagliato da aggiungere char e int. Mi scuso per la presunzione. Vi ringrazio infinitamente

  8. #8
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    84
    Ragazzi scusate ancora ma ho un altro problema sempre con i file. Stavolta ho provato a fare un programmino con una semplice struttura in grado di memorizzare gli elementi di un magazzino, visualizzarli e in caso stamparli su file. Il fatto è che quest'ultima operazione non riesce. Dove ho sbagliato?

    #include <stdio.h>

    typedef struct{
    char nome[20];
    int prezzo;
    int quant;
    } articolo;

    articolo elementi[100];

    int main()
    {

    int n, count;
    char c;

    do{
    printf("Quanti articoli?\n\n");
    scanf("%d", &n);
    for(count=0; count<n; ++count)
    {
    printf("\nArticolo %d\n\n", count+1);
    printf("Nome?\n");
    scanf("%s", elementi[count].nome);
    printf("\n\nPrezzo in Euro?\n");
    scanf("%d", &elementi[count].prezzo);
    printf("\nQuantita'?\n");
    scanf("%d", &elementi[count].quant);
    }
    printf("\nRISULTATI:\n\n\n");
    for(count=0; count<n; ++count)
    {
    printf("Articolo %d\n\n", count +1);
    printf("%s -- %d Euro -- %d pezzi\n\n", elementi[count].nome, elementi[count].prezzo, elementi[count].quant);
    }
    printf("Stampa su file?(S/N)\n\n");
    c=getchar();
    getchar();
    switch(c)
    {
    case 'S':
    for(count=0;count<n;++count)
    {
    FILE *pf = fopen("RISULTATI.txt", "a+");
    if (pf == NULL)
    return 0;

    fprintf(pf, "Articolo numero %d\n\n", count+1);
    fprintf(pf, "%s -- %d Euro -- %d pezzi\n\n", elementi[count].nome, elementi[count].prezzo, elementi[count].quant);
    fclose(pf);
    return 1;
    }
    }
    }while(n);
    }

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    A priva vista .... la fopen non va inserita all'interno del ciclo ... e non devi inserire la return 1 ...

    Due consigli:

    1) apri un thread diverso per un altro problema (anche se sembra che abbia a che fare con il precedente)

    2) inserisci i tag [ code ] [ /code ] per rendere leggibile il codice

    3) quando ci sono problemi, spiega cosa succede in particolare ... cosa fai ... che risultati hai ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    84
    Originariamente inviato da oregon
    A priva vista .... la fopen non va inserita all'interno del ciclo ... e non devi inserire la return 1 ...

    Due consigli:

    1) apri un thread diverso per un altro problema (anche se sembra che abbia a che fare con il precedente)

    2) inserisci i tag [ code ] [ /code ] per rendere leggibile il codice

    3) quando ci sono problemi, spiega cosa succede in particolare ... cosa fai ... che risultati hai ...
    Grazie per i tuoi consigli. E' da poco che sono iscritto e ancora non ho preso la mano con i codici. La prossima volta aprirò un nuovo topic ma per questo problema finiamo di sfruttare questo. Allora ho tolto il return e ho anche tolto lo switch che non serviva sostituendolo con una semplice condizione if. Purtroppo però non stampa su file... Il codice più ordinato è questo

    codice:
    #include <stdio.h>
    
    typedef struct{
    char nome[20];
    int prezzo;
    int quant;       
    } articolo;
    
    articolo elementi[100];
    
    int main()
    {
    
    int n, count;
    char c;
    
    do{
    printf("Quanti articoli?\n\n");
    scanf("%d", &n);
    for(count=0; count<n; ++count)
    {
    printf("\nArticolo %d\n\n", count+1);
    printf("Nome?\n");
    scanf("%s", elementi[count].nome);
    printf("\n\nPrezzo in Euro?\n");      
    scanf("%d", &elementi[count].prezzo);     
    printf("\nQuantita'?\n");      
    scanf("%d", &elementi[count].quant);      
    }
    printf("\nRISULTATI:\n\n\n");
    for(count=0; count<n; ++count)
    {
    printf("Articolo %d\n\n", count +1);
    printf("%s -- %d Euro -- %d pezzi\n\n", elementi[count].nome, elementi[count].prezzo, elementi[count].quant);
    }
    printf("Stampa su file?(S/N)\n\n");
    c=getchar();
    getchar();
    if(c=='s' || c=='S')
    {
    for(count=0;count<n;++count)
    {
    FILE *pf = fopen("RISULTATI.txt", "a+");
    if (pf == NULL)
    return 0;
    
    fprintf(pf, "Articolo numero %d\n\n", count+1);
    fprintf(pf, "%s -- %d Euro -- %d pezzi\n\n", elementi[count].nome, elementi[count].prezzo, elementi[count].quant);
    fclose(pf);
    }
    }
    }while(n);
    }

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.