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++ - Gestione input da tastiera
Forum - C/C++ - Gestione input da tastiera - Pagina 2

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
zanardi84 (Normal User)
Newbie


Messaggi: 11
Iscritto: 28/02/2011

Segnala al moderatore
Postato alle 9:20
Giovedì, 03/03/2011
C'è qualcosa che non mi torna:

Ho impostato il codice così:

Codice sorgente - presumibilmente C/C++

  1. char stringa [5];
  2. cin.getline (stringa, 4);
  3. cout << stringa;



Se digito casa mi ritorna cas

Dove sbaglio?

PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 14:29
Giovedì, 03/03/2011
cin.getline() richiede come parametri la stringa in cui inserire il dato in input, la dimensione della stringa(nel tuo caso 5) e non obbligatoriamente un delimitatore.
quindi non ti prende l'ultimo carattere perché hai specificato come dimensione della stringa 4 e non 5. prova ad effettuare la modifica e vedi che funge ;)

PM Quote
Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Segnala al moderatore
Postato alle 14:40
Giovedì, 03/03/2011
Testo quotato

Postato originariamente da Riuzaki:

cin.getline() richiede come parametri la stringa in cui inserire il dato in input, la dimensione della stringa(nel tuo caso 5) e non obbligatoriamente un delimitatore.
quindi non ti prende l'ultimo carattere perché hai specificato come dimensione della stringa 4 e non 5. prova ad effettuare la modifica e vedi che funge ;)



cerchiamo di non dire cavolate.

La cin.getlin(str, N) e richiede la stringa di destinazione e la dimensione dello STREAM, non della stringa.
L'errore che ti viene(cas al posto di casa) è dato dalla getline che legge dallo stream N - 1 caratteri.
Passandogli 4, leggerai quindi (4 - 1) = 3 caratteri, cioé cas.

Dalla documentazione

Characters are extracted until either (n - 1) characters have been extracted or the delimiting character is found (which is delim if this parameter is specified, or '\n' otherwise)



PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 14:45
Giovedì, 03/03/2011
stiamo dicendo la stessa cosa lorenzo, magari ho sbagliato a scrivere stringa perché si poteva travisare, ma intendevo il flusso di caratteri che arrivano in input!

PM Quote
Avatar
zanardi84 (Normal User)
Newbie


Messaggi: 11
Iscritto: 28/02/2011

Segnala al moderatore
Postato alle 17:07
Giovedì, 03/03/2011
Testo quotato

Postato originariamente da Riuzaki:

cin.getline() richiede come parametri la stringa in cui inserire il dato in input, la dimensione della stringa(nel tuo caso 5) e non obbligatoriamente un delimitatore.
quindi non ti prende l'ultimo carattere perché hai specificato come dimensione della stringa 4 e non 5. prova ad effettuare la modifica e vedi che funge ;)



Quindi nel mio caso

Codice sorgente - presumibilmente C/C++

  1. char stringa [5]; cin.getline (stringa, 5); cout << stringa;


mi legge tutto. Ne deduco che qualsiasi sia il numero che metto, lui mi legge numero - 1 caratteri.

L'importante è non superare la dimensione del buffer.

Giusto?  

PM Quote
Avatar
Pitagora (Member)
Expert


Messaggi: 367
Iscritto: 12/06/2010

Segnala al moderatore
Postato alle 17:21
Giovedì, 03/03/2011
Testo quotato

Postato originariamente da zanardi84:

Quindi nel mio caso

Codice sorgente - presumibilmente C/C++

  1. char stringa [5]; cin.getline (stringa, 5); cout << stringa;


mi legge tutto. Ne deduco che qualsiasi sia il numero che metto, lui mi legge numero - 1 caratteri.

L'importante è non superare la dimensione del buffer.

Giusto?  


Giusto :k:

P.S. fai degli esempi di prova per mettere in pratica ciò che tu stesso affermi!

PM Quote
Avatar
zanardi84 (Normal User)
Newbie


Messaggi: 11
Iscritto: 28/02/2011

Segnala al moderatore
Postato alle 8:51
Martedì, 29/03/2011
Riesumo la discussione perchè ho la necessità di rendere il programma "sicuro".

Vorrei prevenire i problemi che si possono verificare se assegnassi un imput da tastiera superiore allo spazio previsto per il vettore stringa.
In particolare il programma dovrebbe poter segnalare l'anomalia e chiedere di ripetere l'inserimento.

Attualmente ho un vettore char (non posso usare gli string :( ) e acquisisco con getline(cin, N).

Se conoscete qualche altro metodo per l'input ditemi pure.  

Grazie.

PM Quote
Avatar
Pitagora (Member)
Expert


Messaggi: 367
Iscritto: 12/06/2010

Segnala al moderatore
Postato alle 18:06
Mercoledì, 30/03/2011
una funzione con un ciclio while, con dentro un contatore ed uno scanf ("%c", ....); ? Quando l'utente preme invio, controlli se la variabile contatore > n Se è così richiama di nuovo la funzione altrimenti ....

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo