Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    152

    [C] liste stampate su file.txt

    salve
    l'idea di base è quella di creare una lista di interi e stamparla su file di testo, il programma funziona ma quando apro il file.txt mi compaiono dei simboli strani, dove sbaglio?

    codice:
    #include <stdio.h>
    
    struct elemento{
           int info;
           struct elemento *next;
           };
           
    struct elemento *crealista(){
           char c;
           struct elemento *p;
           printf("Vuoi inserire degli elementi? \n");
           scanf("%c" , &c);
           if(c == 'n'){
               p=NULL;
                }
           else if(c == 's'){
                while(c == 's'){
                p=(struct elemento*)malloc(sizeof(struct elemento));
                printf(" inserisci elemento : ");
                scanf("%d" , & p->info);
                scanf("%c", &c);
                if( c == 'n' )
                p->next=NULL;
                else
                p->next=crealista();
                }
                }
                return (p);
                }
    FILE *creaFile(struct elemento *p){
         FILE *fp;
         fp=fopen("rubrica.txt","a");
         while(p!=NULL){
         fputc(p->info,fp);
         p=p->next;
         }
         fclose(fp);
         return fp;
         }
         
             
             
    main(){
           struct elemento *p;
           p=crealista();
           creaFile(p);
           }

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Perché usi la fputc dato che scrivi degli int? Usa la fprintf
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    152
    sugli appunti qua ciò scritto
    fprintf(FILE *punt, str_cont, elementi) il primo è il puntatore al file ma gli altri due che dati sono?

  4. #4
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Sono la stringa della fprintf e gli argomenti, come con la printf.
    Ti faccio un esempio:
    codice:
    FILE *fp;
    int num1=1,num2=2;
    .... // apri il file
    fprintf(fp,"%d %d",num1,num2);
    La usi come la printf solo che metti un argomento in più che è il puntatore al file.
    Queste due:
    codice:
    printf("Ciao");
    fprintf(stdout,"ciao");
    Sono equivalenti.

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    152
    ho modificato il metodo che prende una lista e ne crea il file, ma ora non stampa proprio piu niente!
    codice:
    FILE *creafile(struct elemento *p){
         FILE *f;
         f=fopen("rubrica2.txt","w");
         if(f==NULL)
         printf("ERRORE");
         else
         while(p!=NULL){
         fprintf(f,"%s",p->nome);          //p->nome è una stringa
         fprintf(f,"%d",p->n);               //p->n è un intero
         p=p->next;                         
         }
         fclose(f);
         return f;
         }
    il programma gira ma quando vado ad aprire rubrica2.txt non c'è scritto nulla

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    La modifica riguardava il codice che hai mostrato. Ora che l'hai modificato con altre informazioni (nome, n) può darsi che ci sia un "nuovo" problema da qualche altra parte del codice.

    Per inciso, anche se non c'entra con il problema, non ha senso che la funzione creafile restitusca l'handle del file.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    152
    oddio scusa ti ho linkato il progetto sbagliato!
    sto rifacendo lo stesso esercizio solo che al posto di una struttura di soli interi ho fatto una struttura di stringhe e interi, ho pensato che i metodi saranno gli stessi con un adeguata modifica nel creare le liste.
    quindi il metodo creaFile() lo faccio che ritorna un void?

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Sì, meglio void ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    152
    codice:
    #include <stdio.h>
    
    struct elemento{
           char nome[50];
           int n;
           struct elemento *next;
           };
     
           
    struct elemento *crealista(){
           struct elemento *p;
           char c;
           char k[50];
           printf("vuoi aggiungere un elemento? permi 's' per si 'n' per no e stampare\n");
           scanf("%c",&c);
           if(c=='n'){
           p=NULL;
           }
           else if(c=='s'){
                while(c=='s'){
                p=(struct elemento*)malloc(sizeof(struct elemento));
                printf("inserisci nome : ");
                scanf("%s",k);
                strcpy(p->nome,k);
                printf("inserisci numero : ");
                scanf("%d",&p->n);
                scanf("%c",&c);
                if(c=='n')
                p->next=NULL;
                else
                p=crealista();
                }
                }
                return (p);
                }
                
    void stampa(struct elemento *p){
         printf( " Lista --> ");
         while(p!= NULL){
                   printf("%s", p->nome);
                   printf("-->");
                   printf("%d",p->n);
                   printf("-->");
                   p=p->next;
                   }
                   printf(" fine \n ");
                   }
    
    void *creafile(struct elemento *p){
         FILE *f;
         f=fopen("rubrica2.txt","w");
         if(f==NULL)
         printf("ERRORE");
         else
         while(p!=NULL){
         fprintf(f,"%s",p->nome);
         fprintf(f,"%d",p->n);
         p=p->next;
         }
         fclose(f);
         }
         
      
         
    main(){
           struct elemento *e;
           e=crealista();
           stampa(e);
           creafile(e);
           system("PAUSE");
           }
    è lo stesso programma di prima però con struttura diversa, ho solo aggiunto alla struttura delle stringhe, ma stavolta non riesco ne a stampare su schermo ne a stampare su file! com'è possibile?

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Non è lo stesso programma di prima ...

    Originariamente inviato da keykode20
    codice:
    #include <stdio.h>
    
    struct elemento{
           char nome[50];
           int n;
           struct elemento *next;
           };
     
           
    struct elemento *crealista(){
           struct elemento *p;
           char c;
           char k[50];
           printf("vuoi aggiungere un elemento? permi 's' per si 'n' per no e stampare\n");
           scanf("%c",&c);
           if(c=='n'){
           p=NULL;
           }
           else if(c=='s'){
                while(c=='s'){
                p=(struct elemento*)malloc(sizeof(struct elemento));
                printf("inserisci nome : ");
                scanf("%s",k);
                strcpy(p->nome,k);
                printf("inserisci numero : ");
                scanf("%d",&p->n);
                scanf("%c",&c);
                if(c=='n')
                p->next=NULL;
                else
                p=crealista();
                }
                }
                return (p);
                }
                
    void stampa(struct elemento *p){
         printf( " Lista --> ");
         while(p!= NULL){
                   printf("%s", p->nome);
                   printf("-->");
                   printf("%d",p->n);
                   printf("-->");
                   p=p->next;
                   }
                   printf(" fine \n ");
                   }
    
    void *creafile(struct elemento *p){
         FILE *f;
         f=fopen("rubrica2.txt","w");
         if(f==NULL)
         printf("ERRORE");
         else
         while(p!=NULL){
         fprintf(f,"%s",p->nome);
         fprintf(f,"%d",p->n);
         p=p->next;
         }
         fclose(f);
         }
         
      
         
    main(){
           struct elemento *e;
           e=crealista();
           stampa(e);
           creafile(e);
           system("PAUSE");
           }
    e il void * deve essere semplicemente void
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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 © 2025 vBulletin Solutions, Inc. All rights reserved.