PDA

Visualizza la versione completa : [C++] Problema lettura stringhe con spazi


Dreamer89
14-03-2009, 15:56
Salve a tutti. Non ditemi di cercare su forum perchè il problema è già stato affrontato in passato, lo so benissimo. Infatti ho provato varie soluzioni: utilizzando cin, cin.getline, gets e fgets, ma nessuna di queste funzioni è riuscita a risolvermi il problema. Quando vado ad inserire l'indirizzo, viene salvata solo la prima parola... qualcuno sa aiutarmi?



#include "persona.h"
#include <iostream>
using namespace std;

void Persona::inserisci_nome()
{
cout << "Inserire nome: ";
cin >> nome;
}

void Persona::inserisci_cognome()
{
cout << "Inserire cognome: ";
cin >> cognome;
}

void Persona::inserisci_indirizzo()
{
cout << "Inserire indirizzo: ";
cin >> indirizzo;
}

main()
{
Persona p;
p.inserisci_nome();
p.inserisci_cognome();
p.inserisci_indirizzo();

cout << endl
<< "Nome: " << p.nome << endl
<< "Cognome: " << p.cognome << endl
<< "Indirizzo: " << p.indirizzo << endl;
}

MItaly
14-03-2009, 16:32
Posta la dichiarazione della classe Persona.

Dreamer89
14-03-2009, 16:48
Non credo che il problema sia la dichiarazione della classe, comunque eccola:


class Persona
{
public:
char nome[20];
char cognome[20];
char indirizzo[30];
void inserisci_nome( );
void inserisci_cognome( );
void inserisci_indirizzo( );
};

KrOW
14-03-2009, 16:55
Ciao . . . Nel metodo inserire_indirizzo invece di cin<<indirizzo usa cin.getline(indirizzo, 30) dovrebbe funzionare . . .

Dreamer89
14-03-2009, 17:16
Originariamente inviato da KrOW
Ciao . . . Nel metodo inserire_indirizzo invece di cin<<indirizzo usa cin.getline(indirizzo, 30) dovrebbe funzionare . . .

Credo che tu non abbia letto tutto il primo post, ho già provato quel metodo ma non funziona...

YuYevon
14-03-2009, 17:24
Originariamente inviato da Dreamer89
Credo che tu non abbia letto tutto il primo post, ho già provato quel metodo ma non funziona...

Cosa e come hai provato? Il metodo che ti ha suggerito KrOW funziona perfettamente. A limite, se hai problemi di buffer scrivi

fflush(stdin);

prima dell'istruzione di lettura cin.getline().

KrOW
14-03-2009, 17:30
Strano . . . Per sicurezza l' ho anche provato e funziona . . .

Dreamer89
14-03-2009, 18:20
Originariamente inviato da YuYevon
Cosa e come hai provato? Il metodo che ti ha suggerito KrOW funziona perfettamente. A limite, se hai problemi di buffer scrivi

fflush(stdin);

prima dell'istruzione di lettura cin.getline().

Provato anche questo, ma nulla... sarà che sono su linux? Anche se penso che non centri nulla, bho, ora riprovo

Dreamer89
14-03-2009, 18:31
Niente da fare, ho provato anche creando un nuovo file senza utilizzare la classe... o_O Incredibile

YuYevon
14-03-2009, 18:40
Originariamente inviato da Dreamer89
sarà che sono su linux? Anche se penso che non centri nulla

No invece c'entra. Prova così: includi l'header

<stdio_ext.h>

e al posto di fflush(stdin) scrivi

__fpurge(stdin); // con due _

Se non funziona nemmeno così, posta il codice esatto che stai provando e possibilmente anche un esempio di esecuzione... basta che fai il copia-incolla dalla shell, niente immagini e roba simile.

Loading