Ciao a tutti!
Per risolvere un determinato problema ho scritto la seguente funzione:
La funzione read(...) in particolare legge dallo standard input una stringa sfruttando la funzione di libreria getch!codice:#include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h> //Per getch() #include <ctype.h> void charcoun(char *, int , int , int ); void message(int ); int Bkspace(char *, int, int ); void read(int , char *, int ); int main(void) { char *a=NULL; char *b=NULL; char *c=NULL; a=(char *)calloc(20, sizeof(char)); b=(char *)calloc(30, sizeof(char)); c=(char *)calloc(40, sizeof(char)); message(1); read(20, a, 1); system("cls"); message(2); read(30, a, 2); system("cls"); message(3); read(40, a, 3); system("cls"); printf("\na: %s\n", a); printf("\nb: %s\n", b); printf("\nc: %s\n\n\n", c); system("pause"); return 0; } //Legge dallo standard input una striga di //"max" caratteri. void read(int max, char *data, int id) { char c; char *stream; int j=0, k=max; //k=caratteri disponibili per l'input! //Alloco lo spazio per l'input stream=(char *) calloc(max, sizeof(char)); while(1) { c=getch(); //Legge dallo standard input un carattere stream[j]=c; putch(c); //Se l'utente preme invio termina la fase di input. if(c==13) { stream[j]='\0'; strcpy(data, stream); return; } //Alla pressione di BACKSPACE occorre cancellare //l'ultimo carattere inserito! if(c==8) { if(j!=0) k++; //incremento k! j=Bkspace(stream, j, id); continue; } //Se l'utente supera il numero di caratteri disponibili per l'input //il ciclo termina. if(j==max) { printf("\t > Errore. Puoi scrivere massimo %d caratteri!", max); stream[j]='\0'; strcpy(data, stream); printf("\n\n\n"); system("pause"); return; } charcoun(stream, k, max, id); //Stampa il numero di caratteri disponibili //per l'input. j++; k--; } } //Stampa il numero di caratteri ancora disponibile //per l'input. void charcoun(char *stream, int k, int max, int id) { int j=0; system("cls"); message(id); //Ristampa sullo standard output la stringa stream. while((stream[j]!='\0') && (j<max)) { putch(stream[j]); j++; } if(k>0) { printf("\n\n\n\n"); printf("%d caratteri rimanenti", k-1); } } //backspace. int Bkspace(char * stream, int k, int id) { int j=0; if(k!=0) { stream[k]='\0'; //Cancello l'ultimo elemento inserito; k--; } system("cls"); //Ristampa sullo standard output la stringa stream message(id); while(j!=k) { putch(stream[j]); j++; } return k; } //La funzione message() stampa sullo standard output il messaggio //corrispondente al valore contenuto nella variabile id. void message(int id) { switch(id) { case 1: printf("Inserire il soggetto > "); break; case 2: printf("Inserire commento > "); break; case 3: printf("Inserire scadenza [gg/mm/aaaa] > "); break; } }
Provando la funzione (ho postato anche il main da me utilizzato per testarla) però ho notato che porta a termine SOLO il primo input. Come mai? Il problema dovrebbe esser dovuto alla funzione getch() da me utilizzata ma non capisco il perchè.
Qualche suggerimento? PLZ!
![]()


.

Rispondi quotando
