Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    [C] Problema ciclo for exit value 1

    Ciao a tutti, il mio codice è questo, scritto in C

    codice:
    void insertArticoliFile() {
        int numeroVolte,i;
        FILE *listaarticoli;
        string buffer;
        listaarticoli = fopen("articoli.txt", "a+");
                                    printf("\n\nQuanti articoli vuoi inserire: (MAX 100)");
                                scanf("%d", &numeroVolte);
                                if ((numeroVolte >= 0) && (numeroVolte <= 100))
                                    for (i = 0; i <= 2; i++) {
    
        
    /*
        if (listaarticoli == NULL) {
            listaarticoli = fopen("articoli.txt", "w+");
        }
    */
    
        
        printf("\nInserire il codice dell'articolo (5 cifre): ");
        scanf("%s", buffer);
        writeOnFile(buffer, "|", listaarticoli);
        
        printf("\nInserire la descrizione dell'articolo: ");
        scanf("%s", buffer);
        writeOnFile(buffer, "|", listaarticoli);
        
        printf("\nInserire il prezzo d'acquisto dell'articolo (in Euro): ");
        scanf("%s", buffer);
        writeOnFile(buffer, "|", listaarticoli);
        
        printf("\nInserire il prezzo di vendita dell'articolo: ");
        scanf("%s", buffer);
        writeOnFile(buffer, "@", listaarticoli);
        
        fclose(listaarticoli);
            if (buffer != NULL)
            free(buffer);
    }
    come vedete è una funzione, la uso all'interno di un programma che sto realizzando.

    Il problema è che il for non funziona, nel senso che fa eseguire il contenuto una sola volta e poi netbeans mi riporta Run Failed Exit Value 1.

    Non so proprio come risolvere, e il programma mi serve urgentemente

    Mi date una mano please?

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Ma la fclose e la free sono dentro al ciclo for?

    Manca qualche parentesi?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    20
    impara ad indentare il codice! Così, come fai a capirci qualcosa quando lo rileggi?

  4. #4
    Ho provato anche mettendo la fclose e la free fuori dal ciclo for (la free libera il buffer, deve stare dentro per funzionare, credo).

    Il codice io lo tengo indentato, ma copiandolo qui non si è portato dietro l'indentazione e l'ho dovuto rifare a meno...

    Comunque, possibili soluzioni?

    Se può servire a capire il problema, la funzione WriteOnFile è questa

    codice:
    void writeOnFile(string buffer, string fine, FILE *listaarticoli) {
        size_t len = 0;
        strcat(buffer, fine);
        len = strlen(buffer);
        if (len < 200)
            fwrite(buffer, len, 1, listaarticoli);
        else
            printf("Stringa da scrivere troppo lunga");
    }

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da MarjoMarjo
    Comunque, possibili soluzioni?
    Ma se non rispondi, quali soluzioni si possono dare ?

    La fclose non deve andare nel ciclo e - ripeto - le parentesi sono sbagliate ... le hai controllate?

    E neanche la free ... anche se non si capisce dove sia la malloc nè cosa sia

    string
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Perché sono sbagliate le parentesi?

    Il free deve liberarmi il buffer, che è una stringa di massimo 200 caratteri.

    Grazie per la risposta

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da MarjoMarjo
    Perché sono sbagliate le parentesi?
    Le hai controllate?

    La for dove si chiude?

    La funzione dove si chiude?

    Il free deve liberarmi il buffer, che è una stringa di massimo 200 caratteri.
    E' un buffer allocato in precedenza con malloc ?

    Come ti ho già chiesto, cosa è il tipo "string" ?

    Spero di non dover fare nuovamente le stesse domande ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    nel primo post avevo saltato l'ultima parentesi:

    codice:
    void insertArticoliFile() {
        int numeroVolte,i;
        FILE *listaarticoli = fopen("articoli.txt", "a+");
        string buffer;
        printf("\n\nQuanti articoli vuoi inserire: (MAX 100)");
        scanf("%d", &numeroVolte);
        if ((numeroVolte >= 0) && (numeroVolte <= 100))
        for (i = 0; i <= 2; i++) {
    
        
        printf("\nInserire il codice dell'articolo (5 cifre): ");
        scanf("%s", buffer);
        writeOnFile(buffer, "|", listaarticoli);
        
        printf("\nInserire la descrizione dell'articolo: ");
        scanf("%s", buffer);
        writeOnFile(buffer, "|", listaarticoli);
        
        printf("\nInserire il prezzo d'acquisto dell'articolo (in Euro): ");
        scanf("%s", buffer);
        writeOnFile(buffer, "|", listaarticoli);
        
        printf("\nInserire il prezzo di vendita dell'articolo: ");
        scanf("%s", buffer);
        writeOnFile(buffer, "@", listaarticoli);
        
    
            if (buffer != NULL)
            free(buffer);
        }
           fclose(listaarticoli);
    }
    String: typedef char string[MAXLEN]; MAXLEN è una costante che vale 200;

    Il buffer è una variabile string, il free dovrebbe funzionare comunque per liberarla se non erro.

    Graze

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da MarjoMarjo
    Il buffer è una variabile string
    A parte il fatto che non esistono string in C ma vettori di char, buffer è allocato staticamente e quindi è un errore usare la free. Toglila ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    Perfetto il problema era proprio il free!

    Grazie mille le risposte e scusa la mia ignoranza in materia, ho iniziato a studiare il C da poco e sembra che devo rivedere le basi per non incappare in tali errori

    Grazie di nuovo!

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.