Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    [c++] AIUTO! terminazione comando cin.

    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:

    codice:
    #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...

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Usa getline() e le std::string per acquisire frasi.
    L'input su stringhe ASCIIZ lascialo perdere per il momento.
    codice:
    #include <iostream>
    #include <string>
    using namespace std;
    int main () {
    	string parola;
    	getline(cin,parola);
            cout << parola << endl;
    }
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  3. #3
    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

  4. #4
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Che libro usi? Perché quell'esempio messo così non ha senso.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  5. #5
    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

  6. #6
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    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.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  7. #7
    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???

  8. #8
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    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.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  9. #9
    Grazie mille per le risposte!!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.