PDA

Visualizza la versione completa : [C++] dubbio su funzione getline


madmax84
01-09-2004, 19:21
vorrei sapare se la funzione getline inclusa nella libreria
#include<iostream.h>.

inoltre come mai quando scrivo

string nome_autore;
getline(cin,nome_autore);

mi d errore



grazie


:dh:

anx721
01-09-2004, 22:35
La funzione inclusa in iostream.

Per invocarla devi passare:

- un array di caratteri o un puntatore a char gi allocato con malloc;

- il numero massimo di caratteri da leggere (puoi passare la dimensione dell'array o della zona di memoria allocata)

Esempio:



#include <iostream>

using namespace std;

int main () {
char line[256];

cout << "Inserisci una riga: ";
cin.getline (line, 256);
cout << "La riga immessa : " << line;

return 0;
}


:ciauz:

unomichisiada
01-09-2004, 22:45
#include <iostream>
Nota come giustamente anx721 ti scrive,il file da includere non iostream.h ma iostream

Paky808
02-09-2004, 10:07
Giusto per ampliare i metodi la funzione getline potrebbe anche essere utilizzata con iostream.h in questo modo:

#include<iostream.h>

main()
{
char line[256];

cout << "Inserisci una riga: ";
cin.getline (line,256);
cout << "La riga immessa " << line << endl;

return(0);
}

:)

anx721
02-09-2004, 12:36
Originariamente inviato da Paky808
Giusto per ampliare i metodi la funzione getline potrebbe anche essere utilizzata con iostream.h in questo modo:

#include<iostream.h>

main()
{
char line[256];

cout << "Inserisci una riga: ";
cin.getline (line,256);
cout << "La riga immessa " << line << endl;

return(0);
}

:)

Qual la differenza? Comuqnue iostream.h obsoleto e non andrebbe usato,

:ciauz:

madmax84
02-09-2004, 16:42
ho provato a fare come avete detto voi e non mi da pi errore per adesso mi segna errora all'assegnamento come segue:


cout<<"\n\tInserire nome autore : "<<endl;
char nome_autore[256];

cin.getline (nome_autore, 256);

string due;

due = "SELECT Citazione.testo_cit FROM Citazione JOIN Autore ON Citazione.cod_autore = Autore.cod_autore WHERE Autore.nome= '" + nome_autore + "'";

quando assegno la stringa a due mi da errore


come mai ??

scusate e grazie :dh:

internet
02-09-2004, 17:56
Originariamente inviato da madmax84
vorrei sapare se la funzione getline inclusa nella libreria
#include<iostream.h>.

inoltre come mai quando scrivo

string nome_autore;
getline(cin,nome_autore);

mi d errore


Che compilatore usi?

Comunque, il metodo corretto, in quanto la classe string
si espande automaticamente, quando la funzione getline accoda un nuovo carattere, e di solito questa espansione non prevede una nuova allocazione per ogni carattere accodato.
(per ragioni di efficienza, le implementazioni pi comuni raddoppiano la dimensione dell'array che contiene la stringa, ogni volta che l'array non riesce pi a contenere tutti i caratteri della stringa)

vedi se questo ti funziona


#include <iostream>
#include <string>
#include <limits>

using namespace std;

int main()
{
string nome_autore;

cout << "autore: ";
getline(cin, nome_autore);

cout << "Nome dell'autore: " << nome_autore << endl;

return 0;
}


La include segnalata in blue necessaria, se stai usando Visual C++, altrimenti non funziona correttamente.

internet
02-09-2004, 18:03
Originariamente inviato da madmax84
due = "SELECT Citazione.testo_cit FROM Citazione JOIN Autore ON Citazione.cod_autore = Autore.cod_autore WHERE Autore.nome= '" + nome_autore + "'";

quando assegno la stringa a due mi da errore


come mai ??

scusate e grazie :dh:

o usi questa


#include <iostream>
#include <string>
#include <limits>

using namespace std;

int main()
{
string nome_autore;

cout << "autore: ";
getline(cin, nome_autore);

string due = "SELECT Citazione.testo_cit "
"FROM Citazione JOIN Autore ON "
"Citazione.cod_autore = Autore.cod_autore "
"WHERE Autore.nome= '" + nome_autore + "'";

cout << "Query: " << due << endl;

return 0;
}


oppure



#include <iostream>
#include <string>

using namespace std;

int main()
{
char nome_autore[256];

cout << "autore: ";
cin.getline(nome_autore, 256);

string due = "SELECT Citazione.testo_cit "
"FROM Citazione JOIN Autore ON "
"Citazione.cod_autore = Autore.cod_autore "
"WHERE Autore.nome= '" + string(nome_autore) + "'";

cout << "Query: " << due << endl;

return 0;
}

madmax84
02-09-2004, 19:11
Ho dichiarato una classe autore nel file di intestazione


class autore{

char nome_autore[256];

public:
autore();
string query(); //la chiamta della funzione nel main : autore*a; a->query();

};



nel file di realizzazione ho definito la funzione membro query()


string autore::query(){

cout<<"\n\tInserire nome autore : "<<endl;
cin.getline(nome_autore,256);
string due;
due = "SELECT Citazione.testo_cit FROM Citazione JOIN Autore ON Citazione.cod_autore = Autore.cod_autore WHERE Autore.nome= '" + nome_autore + "'";

return due;

}


dove c'e scritto in rosso mi viene segnalato il segunte errore come mai??

invalid operands of types `const char[119]' and `char[256]' to

internet
02-09-2004, 21:15
hai messo questo include ?
#include <string>

e comunque anche se hai messo l'include <string>
non puoi concatenare le stringhe in quel modo.

Originariamente inviato da madmax84
string autore::query(){

cout<<"\n\tInserire nome autore : "<<endl;
cin.getline(nome_autore,256);
string due;
due = "SELECT Citazione.testo_cit FROM Citazione JOIN Autore ON Citazione.cod_autore = Autore.cod_autore WHERE Autore.nome= '" + string(nome_autore) + "'";
return due;

}



dove c'e scritto in rosso mi viene segnalato il segunte errore come mai??

invalid operands of types `const char[119]' and `char[256]' to[/B]

Non puoi concatenare due stringhe in quel modo

esempio non valido


string s = "ciao, " + "ciao";


esempio valido


string s = string("ciao, ") + "ciao";


esempio valido


string s = "ciao, " + string("ciao");

Loading