Salve a tutti,sto scrivendo un programma,per ora incompleto,ma già trovo dei problemi,in particolare col buffer che si riempie e non so come svuotarlo.
Con la tecnica:
Finora ho sempre usato questa tecnica,ma ora vedo che mi ignora le fscanf e parte a stampare caratteri,da quando ho iniziato a usare fprintf.codice:while(getchar()!=10);
Anche se durante un ciclo si dovrebbe fermare a ricevere caratteri parte,ecco un' immagine del prompt:
Finora aveva sempre funzionato,ma anche con fflush non risolvo![]()
Questo programma deve presentare una sorta di menù iniziale dove l' utente sceglie di digitare un numero.Se digita 1 parte la funzione immetti_dati,l' altra non l' ho ancora scritta.
Ma in teoria cliccando 1 dovrebbe entrare nella funzione,invece rimane nella main ignorando fscanf e continua a stampare.
Non ci sono ne errori ne avvisi in compilazione.
Ecco il codice:
codice:#include"ramy.h" typedef struct { int eta; float media; char *nome; char *cognome; }studente; studente* immetti_dati(char*); void stampa_dati(char*); char* ottieni_stringa(char*ptr); int main() { char ctr=-1; int num=0; while(ctr<49||ctr>51) { if(num>0) fprintf(stdout,"Scelta non valida,\nMenu':\n1)Digita dati studenti;2)Stampa dati studenti;3)esci"); else fprintf(stdout,"Inserimento dati studente,benvenuto.\nMenu':\n1)Digita dati studenti;2)Stampa dati studenti;3)esci"); fscanf(stdin,"%c",&ctr); num++; getchar(); if(ctr==49) immetti_dati(&ctr); else stampa_dati(&ctr); } return 0; } studente* immetti_dati(char*ptr) { FILE *fp; char ctr=-1,*file; int counter=0; studente *p; p=(studente*)malloc(sizeof(studente)); (*p).nome=(char*)malloc(sizeof(char)); (*p).cognome=(char*)malloc(sizeof(char)); do { if(counter==0) fprintf(stdout,"Su quale file vuoi salvare i tuoi dati?\n"); else fprintf(stdout,"Scelta non valida,digitare il nome di un file seguito da .txt\n"); fscanf(stdout,"%s",file); fopen(file,"w"); counter++; }while(fp==NULL); do { fprintf(stdout,"Immissione dati studente %d (max 10),immetti eta': "); fscanf(stdin,"%d",(*p).eta); fprintf(fp,"%d",(*p).eta); fprintf(stdout,"\nImmetti media (valore in float):"); fscanf(stdin,"%f",(*p).media); fprintf(fp,"%.2f",(*p).media); fprintf(stdout,"\nImmetti nome: "); (*p).nome=ottieni_stringa((*p).nome); fputs((*p).nome,fp); fprintf(stdout,"\nImmetti cognome: "); (*p).nome=ottieni_stringa((*p).nome); fputs((*p).cognome,fp); }while(ctr!=48); *ptr=-1; return p; } void stampa_dati(char*ptr) { *ptr=-1; } char* ottieni_stringa(char*ptr) { ptr=(char*)malloc(sizeof(char)); int i=1; char ci; fflush(stdin); while(ci!=10) { ci=getchar(); if(ci!=10) ptr[i-1]=ci; ptr=(char*)realloc(ptr,(i+1)*sizeof(char)); i++; } ptr[i-2]='\0'; return ptr; }


Rispondi quotando
