PDA

Visualizza la versione completa : [C++] Terminazione comando cin()


albert00
12-03-2011, 11:43
Ciao, scusate se non mi sono presentato, ma non trovo il topic per le presentazioni.
Veniamo subito al dunque: sto studiando il c++, ma ho le idee un po confuse riguardo all'immissione di stringhe.
Non capisco come si fa a inserire una frase di più parole se il comando cin>> si arresta allo spazio.

E' il mio libro propone di fare questa cosa, ma io non l'ho capita:



#include <iostream>
#include <cstring>
using namespace std;
int main () {
char parola[80];
do {
cin>>parola;
if (*parola)
cout<<"\t\" "<<parola<<"\"\n";
} while (*parola);
}


e poi parla di premere Ctrl D (su linux) o Ctrl z (su win) per arrestare il flusso cin.

boh... :bhò:

shodan
12-03-2011, 11:59
Usa getline() e le std::string per acquisire frasi.
L'input su stringhe ASCIIZ lascialo perdere per il momento.


#include <iostream>
#include <string>
using namespace std;
int main () {
string parola;
getline(cin,parola);
cout << parola << endl;
}

albert00
12-03-2011, 12:07
ciao e grazie per la risposta, ci sono riuscito con getline, (pero in modo un po diverso, e cioè cin.getline(parola,80); ) ma vorrei capire anche come funziona l'esempio che sfrutta i puntatori (quello che ho postato), dato che li ho studiati e dovrei comprenderlo, ma non lo capisco

shodan
12-03-2011, 12:12
Che libro usi? Perché quell'esempio messo così non ha senso.

albert00
12-03-2011, 12:57
come non ha senso! io lo ho copiato in un file cpp e lo ho compilato con dev-cpp e funziona, praticamente mette una parola per riga, ognuna tra virgolette, per esempio se scrivo:

ciao come va

mi esce:

"ciao"
"come"
"va"

Il problema è che non riesco a capire la logica che sta dietro a quel codice...

Comunque il libro è "Fondamenti di programmazione in c++" di Louis Aguilair, della McGrawHill

shodan
12-03-2011, 13:23
Non ha senso perchè richiede un intervento dell'utente per fermare il flusso di input.
Nella pratica, una cosa del genere è masochistica.

La logica comunque è semplice: estrae i caratteri presenti da cin fin quando ( con ctrl-D / ctrl-Z ) si arresta il flusso di input. Quando ciò viene fatto, in parola viene messo NULL, l'if saltato e il do-while esce.

albert00
12-03-2011, 14:14
si ma mi pare che non usa cin.get, ma usa cin>> solamente come fa allora ad accettare gli spazi?

cioè continua ad accettare spazi finchè *parola punta a qualcosa, ma è ovvio che punta sempre a qualcosa, dato che non viene mai spostato da parola il puntatore

alla fine considera ogni parola come un singolo flusso di input, o considera tutto come un'unica stringa???

EDIT: Forse ho capito: quando si preme il carattere per terminare, il puntatore non punta piu a nulla e si arresta il ciclo giusto???

shodan
12-03-2011, 14:35
Si.
L'estrattore >> si limita a estrarre caratteri fino al primo spazio incontrato, ma gli altri sono ancora li in attesa di essere tirati fuori. Quando non c'è ne sono più, il cin ne richiede ancora, tu gli dai il fine inserimento e cin immette in parola uno 0 (NULL).
A quel punto tutto finisce.

albert00
13-03-2011, 23:17
Grazie mille per le risposte!!! :)

Loading