Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Input personalizzato
Forum - C/C++ - Input personalizzato

Avatar
bububs (Normal User)
Expert


Messaggi: 253
Iscritto: 11/03/2010

Segnala al moderatore
Postato alle 16:35
Martedì, 11/12/2012
Ciao a tutti, è da diversi giorni che non riesco a venirne a capo su un problema particolare, ovvero quello che data una lettura continua di caratteri, il programma termini se viene letto un determinato carattere (scusate la ripetizione) e non dopo lo \n anche se dopo la lettura del carattere in questione :grr:
sono arrivato a questo punto però confido in voi per cercar di risolvere questo mio dubbio :rofl:
Codice sorgente - presumibilmente C/C++

  1. char car;
  2. char string[100];
  3. while( ( car = getchar() ) != '.'){
  4.         if(car == '.')
  5.             break;
  6.         stringa[pos] = car;
  7.         pos++;
  8.     }


Ultima modifica effettuata da bububs il 11/12/2012 alle 16:38
PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 19:04
Martedì, 11/12/2012
Ciao!

Il tuo programma non ti funziona perché getchar() non legge il singolo carattere premuto, ma legge i caratteri presenti nel buffer da tastiera. Quest' ultimo, viene "esaminato" dal programma soltanto quando l' utente preme il carattere invio.

Di conseguenza, ti batta cambiare la modalità di uscita dal ciclo while, e la selezione dei caratteri da memorizzare.

PM Quote
Avatar
bububs (Normal User)
Expert


Messaggi: 253
Iscritto: 11/03/2010

Segnala al moderatore
Postato alle 16:13
Mercoledì, 12/12/2012
Intanto grazie per la risposta!

Testo quotato


Di conseguenza, ti batta cambiare la modalità di uscita dal ciclo while, e la selezione dei caratteri da memorizzare.


Cioè?? Non potresti farmi un esempio?

PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 18:03
Mercoledì, 12/12/2012
Ecco qui un esempio:
Codice sorgente - presumibilmente C#

  1. char messaggio[100]="", t=' ';
  2.   int i=0;
  3.   do
  4.   {
  5.        t=getchar();
  6.        if ((t != '\n') && (t != '.')) // condizioni per il salvataggio del carattere
  7.        {
  8.             messaggio[i++]=t; // salvo il carattere e incremento l' indice
  9.        }
  10.   } while (t!='\n');
  11.   /*
  12.       Come condizione d' uscita, attendo il carattere "invio".
  13.       In questo modo considero tutti i caratteri contenuti nel buffer.
  14.   */
  15.   messaggio[i]='\0'; // aggiungo il carattere terminatore


Ultima modifica effettuata da Poggi Marco il 12/12/2012 alle 18:06
PM Quote
Avatar
bububs (Normal User)
Expert


Messaggi: 253
Iscritto: 11/03/2010

Segnala al moderatore
Postato alle 12:51
Giovedì, 13/12/2012
Grazie mille! funziona alla perfezione :k:

Ultima modifica effettuata da bububs il 13/12/2012 alle 13:23
PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 13:26
Giovedì, 13/12/2012
In c non è definita una funzione del genere. Però è possibile determinare se l' utente preme un tasto con la funzione kbhit( ) ( http://www.cprogramming.com/fod/kbhit.html ).

PM Quote
Avatar
bububs (Normal User)
Expert


Messaggi: 253
Iscritto: 11/03/2010

Segnala al moderatore
Postato alle 21:56
Giovedì, 13/12/2012
Grazie mille! :k:

PM Quote