Hola a todos mi pregunta de hoy es si se puede imprimir una cadena despues de un cin
lo explico mejor en la imagen quiero que me salga asi
En la salida en consola:
Ingrese algo: hola como estas bien y tu. <- pero todo en la misma linea. si que me haga un salto de linea
(http://2.bp.blogspot.com/-upMmYlivah0/UuctDwe7Q4I/AAAAAAAAAco/vBmdgbap6uU/s1600/Cin-cout.png)
Guardandolo en una variable? La verdad no entendí :-[
si te fijas el cin hace un salto de linea, y eso es lo que no quiero que me haga.
sino que se muestre todo junto.
gracias por contestar.
Que te parece este? :D
Lo vi en un post algo antiguo.
Es de eternal idol la solución.
#include <iostream>
using namespace std;
int main (){
string frase;
cout << "Escriba algo :)";
cin.getline((char*)frase.c_str(), 100);
cout << frase.c_str() << " bien y tu";
cin.ignore();
return 0;
}
Lol, olvidate de esa aberración vangodp *_*.
C_str() es un puntero solo para LECTURA. Si intentas escribir en él la vas a liar parda, te puede funcionar de "chiripa" para 3-4 caracteres. Prueba a meterle 10-15 a ver que pasa.
En todo caso sería:
#include <iostream>
using namespace std;
int main ()
{
string frase;
cout << "Escriba algo :)";
getline(cin,frase);
cout << frase << " bien y tu";
cin.ignore();
return 0;
}
Y aún así tampoco es lo que pide el usuario. Para hacerlo tendrías que usar una librería externa (como ncurses o la de conio.h). Si usas la de conio te interesa la función getch()
#include <iostream>
#include<conio.h>
using namespace std;
string LeerPalabra()
{
string palabra;
int ch;
while ((ch = getch()) != ' ' && ch != '\n' && ch != EOF)
{
cout<<(char)ch;
palabra += ch;
}
cout<<(char)ch;
return palabra;
}
int main ()
{
string frase;
cout << "Escriba algo :)";
frase = LeerPalabra();
cout <<" bien y tu";
cin.ignore();
return 0;
}
Eso si hará lo que quieres, leera hasta que encuentre un espacio y devolverá la palabra leída.
Puedes hacer incluso que no muestre lo que vas escribiendo (comentando los couts que he puesto en la función).
Pues entonces lo arreglo algo :D
#include <iostream>
using namespace std;
int main (){
int TAM = 500;
char frase[TAM];
cout << "Escriba algo :)";
cin.getline(frase, TAM, '\n'); //mientras no traspase 500 y no pulses enter lee toda la linea
cout << frase << " bien y tu";
cin.ignore();
return 0;
}
Muy bueno Tu código. ¿Pero no puede capturar mas de una sola palabra?
Seria perfecto si por ejemplo leera algo como "Hola que ta?". Sin embargo solo ha leido el Hola :/
Pero esta muy bien, a ver si lo consigo hacer que se trague la linea completa :D
#include <iostream>
#include<conio.h>
#include<fstream>
using namespace std;
string LeerPalabra() {
string palabra;
int ch;
while ((ch = getch()) != ' ' && ch != '\n' && ch != EOF) {
cout<<(char)ch;
palabra += ch;
}
cout<<(char)ch;
return palabra;
}
int main () {
string frase;
cout << "Escriba algo :)";
frase = LeerPalabra();
cout <<" bien y tu";
cin.ignore();
return 0;
}
tuve que incluir fstream, me daba error por el EOF.
No sera por eso?
Si lo que quieres es leer la línea entera:
#include <iostream>
#include<conio.h>
using namespace std;
string LeerPalabra()
{
string palabra;
int ch;
while ((ch = getch()) != 13 && ch != EOF)
{
cout<<(char)ch;
palabra += ch;
}
return palabra;
}
int main ()
{
string frase;
cout << "Escriba algo ";
frase = LeerPalabra();
cout <<" bien y tu";
cin.ignore();
return 0;
}
Cita de: vangodp en 28 Enero 2014, 12:48 PM
Pues entonces lo arreglo algo :D
#include <iostream>
using namespace std;
int main (){
int TAM = 500;
char frase[TAM];
cout << "Escriba algo :)";
cin.getline(frase, TAM, '\n'); //mientras no traspase 500 y no pulses enter lee toda la linea
cout << frase << " bien y tu";
cin.ignore();
return 0;
}
2 anotaciones:
- No hace falta que indiques '\n', el argumento por defecto de getline es ese.
- Puedes seguir usando strings, no hace falta que te pasas a char:
getline(cin,frase);
getline(cin,frase); ;D(http://vz.iminent.com/vz/b0270546-5b37-47e8-871c-74e46826cccd/2/signo-ok.gif)
#include <iostream>
using namespace std;
int main (){
string str;
getline(cin, str);
cout << str;
cin.ignore();
return 0;
}
Perfecto para mi ^^
Simples y funciona. Me lo guardo ;-)
De nada ^^
Puedes usarlo en cualquier fichero:
ifstream archivo("Leeme.txt");
string linea;
getline(archivo,linea);
cout<<linea;
Eso imprime una linea desde un archivo(leeme en este caso)?
#include <iostream>
#include <fstream>
using namespace std;
int main () {
ifstream fin("archivo.txt");
string nombre;
int edad;
fin >> nombre >> edad ;
cout << "tu nombre es: " << nombre
<< " y tienes: " << edad
<< " anyos :)";
cin.ignore();
return 0;
}
Así hacia.
Lo vi en un vídeo de paueky, mola :D
Parece el cin jajaj fin ^^
Muy bueno el getline() este.
Parece una navaja suiza jeje
Gracias por compartir :D
Hola a todos gracias por sus repuesta me acaba de levantar y vi un montón de respuestas las veo cuando regrese de la U. saludos a todos y muchas gracias
Mil gracias lo revice y es exactamente lo que nesecitaba.
no sabia como quitar ese salto de linea gracias y saludos a todos
(http://2.bp.blogspot.com/-rbpd_D00R60/Uuhkm5LSCqI/AAAAAAAAAc4/4NKDE26B0UU/s1600/solucionado.png)
¿por que no?
#include <iostream>
#include<cstdlib>
using namespace std;
int main ()
{
string frase;
cout << "Escriba algo :)"<<endl;
cin>>frase;
system("cls");
cout << frase << " bien y tu";
cin.ignore();
return 0;
}
por que si intentas meter "sopa caliente" a la frase solo te va salir "sopa" XD
No lo captura nada después del espacio :(
por eso es mejor geline. Por que captura toda la linea sin importar espacios.
Si lo que quiere es meter hola si le sirve, pero y si quiere "hola guapo! como estas?" XD