PDA

Visualizza la versione completa : [C++] cin.getline sballato


dmitraco
07-01-2005, 23:17
ho 1 problema enorme. mi spiego:
se uso prima il cin e poi il cin.getline quando immetto qualcosa cn il cin, poi il primo cin.getline nn me lo fa immettere...me lo salta
stessa cosa accade quando nel cin.getline sforo d dimensione.

cio..s.e ho 1 blocco del tipo

cin>>n;

for (i=0;i<n;i++){
cout"\nimmetti "<<i;
cin.getline(stringa[i],50);}

digito n,premo invio e mi compare:

immetti 1
immetti 2

quindi il primo cin.getline me lo salta. come devo risovere sto problema???????

anx721
08-01-2005, 00:55
Penso che dipenda dal fatto che quando leggi con

cin >> n;

il carattere di "a capo" che segue il numero inserito non viene elimimato dallo standard input, quindi con la successiva lettura con getLine() si ha subito un carattere di fine linea, per cui come se avessi immesso una riga vuota, e si passa all'iterazione successiva; per questo quando leggi singoli caratteri o numeri con cin, svuota il buffer dello standard input con l'istruzione:

fflush(stdin);

per utillizzarla includi cstdio:

#include<cstdio>

fflush una funzione di i/o della libreria standard del C, non ho trovato la corrispondente in c++; quindi il tuo codice dovrebbe essere:

cin>>n;
//svuoto il buffer
fflush(stdin);
for (int i=0;i<n;i++){
cout<<"\nimmetti "<<i;
cin.getline(stringa[i],50);}
}

unomichisiada
08-01-2005, 00:59
Si con la fflush dovrebbe andare,un problema analogo lo da anche la scanf in C.

Johnny_Depp
08-01-2005, 01:13
...linguaggio utilizzato sempre bello in mostra (soprattutto nei titoli)

dmitraco
08-01-2005, 11:13
e xk mi d lo stesso problema quando sforo cn il getline?

Elninno
08-01-2005, 11:42
Approfitto di questo topic per porre anche io una domanda...

perch quando uso questo codice il cout non mi funziona (ecco il codice)

while(!cin.eof())
cin.getline(temp,maxele-1);

cout<<temp;



Mentre quando uso quest'altro mi funziona(ecco il codice)

while(!cin.eof())
cin>>temp;

cout<<temp;


????????? :messner:

anx721
08-01-2005, 14:16
che significa no funziona???

netarrow
08-01-2005, 14:44
se stai usando il C++, per leggere una stringa potresti utilizzare la classe string:



#include <string>
#include <iostream>

using namespace std;

int main() {
string s;
cin >> s;
cout << s;
}



:ciauz:

Elninno
08-01-2005, 14:46
Originariamente inviato da Elninno
Approfitto di questo topic per porre anche io una domanda...

perch quando uso questo codice il cout non mi funziona (ecco il codice)

while(!cin.eof())
cin.getline(temp,maxele-1);

cout<<temp;



Mentre quando uso quest'altro mi funziona(ecco il codice)

while(!cin.eof())
cin>>temp;

cout<<temp;


????????? :messner:
tutto a posto ho risolto....per quanto riguarda le classi ancora non so cosa esse siano :P!

edriv
20-06-2005, 12:58
Io ho ancora problemi con sto maledetto getline!

Ecco il codice:



string expr; char buf[1000];
do {
// INPUT ESPRESSIONE
cout << "Scrivi l'espressione:" << endl;
fflush(stdin);
cin.getline(buf, 1000, '\n');
fflush(stdin);
expr = buf;
// qui fa tutti i calcoli che deve...
// PROSSIMA
cout << "Un'altra espressione (s/n) ?"; cin >> continua;
} while(toupper(continua)=='S');


La prima volta va bene, ma se rispondo "s", non mi chiede pi niente e va avanti con una stringa nulla!!

Loading