zanardi84 (Normal User)
Newbie
Messaggi: 11
Iscritto: 28/02/2011
|
C'è qualcosa che non mi torna:
Ho impostato il codice così:
Codice sorgente - presumibilmente C/C++ |
char stringa [5];
cin.getline (stringa, 4);
cout << stringa;
|
Se digito casa mi ritorna cas
Dove sbaglio?
|
|
()
Newbie
Messaggi:
Iscritto:
|
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
|
|
lorenzo (Normal User)
Guru
Messaggi: 1178
Iscritto: 15/04/2008
|
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)
|
|
()
Newbie
Messaggi:
Iscritto:
|
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!
|
|
zanardi84 (Normal User)
Newbie
Messaggi: 11
Iscritto: 28/02/2011
|
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++ |
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? |
|
Pitagora (Member)
Expert
Messaggi: 367
Iscritto: 12/06/2010
|
Postato originariamente da zanardi84:
Quindi nel mio caso
Codice sorgente - presumibilmente C/C++ |
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
P.S. fai degli esempi di prova per mettere in pratica ciò che tu stesso affermi! |
|
zanardi84 (Normal User)
Newbie
Messaggi: 11
Iscritto: 28/02/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.
|
|
Pitagora (Member)
Expert
Messaggi: 367
Iscritto: 12/06/2010
|
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 ....
|
|