[Solucionado]entrar datos con getline utilizar ignore

Iniciado por tonilogar, 25 Mayo 2011, 14:39 PM

0 Miembros y 2 Visitantes están viendo este tema.

tonilogar

Un saludo de nuevo a todos los integrantes del foro, después de un tiempo empollando c++.


Pues con este código lo único que quiero es recoger un string incluyendo los espacios y para eso utilizo getline.

El problema es que cuando escribo el dato tengo que pulsar dos returns en lugar de una vez,  como funciona cin.
Si no me equivoco, el problema es que el getline después de los datos de entrada , siempre pone al final /n.
Y /n se tiene que borrar con ignore.

Pero no consigo hacerlo.
¿Estoy en lo cierto en lo referente a '/n? o ¿porque razón hay que teclear dos veces a return.?
¿O es mejor utilizar otra forma para recoger variables string con espacios?
Código (cpp) [Seleccionar]

#include <iostream>
#include <string>
using namespace std;
int main()
{

string fichero;


cout << "entra datos";
cout << endl<< endl;
getline (cin,fichero);

cout << endl<< endl;



cout << fichero << "   numero de caracteres";
cout << endl<< endl;
cout << fichero.length();
cout << endl<< endl;
cout << fichero.capacity();
cout << endl<< endl;
cout << fichero.size();
cout << endl<< endl;

return 0;
}

Un saludo y gracias por vuestro tiempo.

No porque discrepe de tu opinión intento ofenderte.

Un saludo a todos y gracias por vuestro tiempo.

satu

Hola

Lo estoy probando y funciona normal, no tengo que pulsar 2 veces enter, lo que sí te voy a corregir es el #include <string>, que en C++ es #include <cstring> y el carácter que pone no es /n sino \n

Por lo demás todo normal

Saludos
Breakbeat como forma de vida

tonilogar

Gracias por tu ayuda satu.

Pero no entiendo como a mi no me funciona correctamente.
Yo estoy utilizando el Microsoft Visual c++.
Lo probare con algún editor en ubuntu.
Corrígeme si me equivoco ¿las librerías con c delante no son las de c?¿o son las de c++?

string para c++.
cstring para c.

Gracias por tu tiempo

No porque discrepe de tu opinión intento ofenderte.

Un saludo a todos y gracias por vuestro tiempo.

[L]ord [R]NA

no... lo que sucede es que las librerias de C fueron agregadas a C++ con una C antecediendo al nombre, por lo tanto

#include <cstring> es para C++ y #include <string> para C

tonilogar

No porque discrepe de tu opinión intento ofenderte.

Un saludo a todos y gracias por vuestro tiempo.

Littlehorse

Cita de: [L]ord [R]NA en 25 Mayo 2011, 23:58 PM
no... lo que sucede es que las librerias de C fueron agregadas a C++ con una C antecediendo al nombre, por lo tanto

#include <cstring> es para C++ y #include <string> para C

No.

En C es string.h.

En C++, el archivo de cabecera cstring equivaldría a string.h (digo equivaldría porque no son iguales)

En C++, el archivo de cabecera string contiene la clase string, por lo tanto

#include <string.h> // Lenguaje C: strcpy, strcmp, etc

Código (cpp) [Seleccionar]
#include <cstring> /* Lenguaje C++: strcpy, strcmp, etc */

Código (cpp) [Seleccionar]
#include <string> /* Lenguaje C++: clase string, c_str, compare, append, etc */

Saludos
An expert is a man who has made all the mistakes which can be made, in a very narrow field.

tonilogar

Gracias por tu tiempo Littlehorse.
Me ha quedado claro, clarito, clarete.
No porque discrepe de tu opinión intento ofenderte.

Un saludo a todos y gracias por vuestro tiempo.

tonilogar

Pues en principio ya está solucionado.
Como decía satu funciona correctamente.
El problema parece ser el compilador que utiliza Microsoft visual c++ 6 (que según me han dicho es) MSVC++
Lo he compilado con Microsoft visual studio y funciona correctamente.

Podéis recomendarme un editor gratuito que trabaje en win y linux.
¿Eclipse es una buena opción?
No porque discrepe de tu opinión intento ofenderte.

Un saludo a todos y gracias por vuestro tiempo.