Newsgroup: it.comp.lang.c++
Titolo: [?] getline

Salve.
Ecco un listato semplice semplice.
#include <iostream>
#include <string>
using namespace std;
int main()
	{
	string riga1;
	string riga2;
	cout << "Inserire mittente: ";
	getline(cin, riga1);
	cout << "Inserire destinatario: ";
	getline(cin, riga2);
	cout << riga1 << "\n" << riga2 << "\n";
	return 0;
	}
Perchè non funziona? Dove ho sbagliato?
Ecco cosa succede quando eseguo il codice (vc++ 6 su winxp).
Inserire mittente: [io scrivo: prova1 e premo invio]
[il cursore lampeggia ancora: premo invio nuovamente]
Inserire destinatario: [io scrivo: prova2 e premo invio]
prova1
[riga vuota]
Press any key to continue
Inserire mittente: [io scrivo: prova1 e premo invio]
[il cursore lampeggia ancora: scrivo prova2 e premo invio]
Inserire destinatario: [io scrivo: prova3 e premo invio]
prova1
prova2
Press any key to continue

...

Ho testato il tuo codice su Dev-C++ è funziona benissimo.
Ecco cosa succede:
Inserire mittente: [scrivo prova1 e premo Invio]
Inserire destinatario: [scrivo prova2 e premo Invio]
[Adesso appare]
prova1
prova2
Premere un tasto per continuare...
Quindi mi sembra tutto ok. Se non è tutto ok probabilmente ho capito
male io le tue intenzioni riguardo al programma.
Comunque, se posso esprimere una perplessità, mi chiedo a cosa serva
usare la funzione getline() quando digiti una sola linea...
Potevi più semplicemente fare così:
#include <iostream>
#include <cstdlib>
#include <string>
using std::cout;
using std::cin;
using std::endl;
using std::string;
int main()
{
    string a, b;
 
    cout << "Inserire mittente: ";
    cin >> a;
    cout << "\nInserire destinatario: ";
    cin >> b;
 
    cout << "\n" << a << "\n" << b << endl << endl;
 
    system("PAUSE");
    return 0;
}
Spero di esserti stato d'aiuto. Se hai qualche problema chiedi pure.
Hideo

 Perchè non funziona? Dove ho sbagliato?
[CUT]
Non ne sono sicuro ma mi sembra di ricordare che in VC++ 5.0/6.0 getline()
era affetto da un bug corretto poi dal service pack 5.

     cout << "\n" << a << "\n" << b << endl << endl;
Hai provato a inserire come mittente Di Biagio?
Ciao,
Nicola

...

Scusami, ho ricontrollato adesso il mio messaggio.
Volevo solo dire che non ha senso utilizzare getline() quando si
immette in input solo una PAROLA.
Mi scuso soprattutto con chi ha aperto il post, non era mia intenzione
confondergli le idee.
Hideo

using std::string;
cosa significano tutte queste direttive?

 cosa significano tutte queste direttive?
Le prime tre sono direttive al preprocessore che č un programma che fa
parte del compilatore e che viene eseguito prima della compilazione
vera e propria. Il preprocessore non fa altro che sostituire o
aggiungere parti di codice a quello originale (scritto da te,
insomma).
La direttiva #include permette di includere nel tuo codice riferimenti
a determinate liberie, in questo caso iostream, cstdlib e string che
devono essere messi in parentesi angolari. Notare che dopo una
direttiva al preprocessore NON c'č il punto e virgola.
Le ultime quattro righe di codice introducono un concetto molto
importante della programmazione C++: i namespace. Sono infatti delle
direttive di uso che
permettono di accedere ai membri dei rispettivi header, senza bisogno
di qualificarli ogni volta (es. std::cout << "Ciao!"; ), in tutte le
istruzioni che seguono all'interno dello stesso ambito.
Per utilizzare "i nomi" delle rispettive librerie sono necessarie
queste direttive. La dichiarazione using namespace std; permette di
accedere al completo "spazio dei nomi" di quell'header e nel tuo
programma basterebbe mettere anche solo quello, ma č buona norme di
programmazione non farlo, per non "sporcare" il namespace globale.
Spero di esserti stato il piů chiaro possibile.
Se hai dubbi e vuoi delucidazioni non esitare a chiedere, siamo tutti
qui per imparare.
Hideo

qui per imparare.
grazie sei stato chiarissimo

> grazie sei stato chiarissimo
Figurati, non c'è cosa più bella e soddisfacente al mondo che aiutare
qualcuno, per quanto poco si possa fare.
Hideo