Problema con string, char, etc

Iniciado por GenR_18, 21 Septiembre 2013, 02:05 AM

0 Miembros y 1 Visitante están viendo este tema.

GenR_18

Pff de seguro es una tonteria, pero esta tonteria me ha llevado buen rato quebrandome la cabeza  :silbar:

Lo que quiero hacer es recibir valores tipo cadena y mostrarlos completos, es decir:


#include <iostream>

using namespace std;

int main(){

     char nombre[50];
     cout << "Nombre(s):" << endl;
     cin >> nombre;
     cout << nombre << endl;

     return 0;
}



Que si yo ingreso algo como "Nombre Apellido" (notese el espacio), no sólo me muestre "Nombre" (como lo hace), sino que me guarde toda la frase que el usuario ingrese, lo he probado de varias formas, tratando de ver cuál me funciona, pero nada.


#include <iostream>
#include <string> // o string.h

using namespace std;

int main(){

     string nombre;
     cout << "Nombre(s):" << endl;
     cin >> nombre;
     cout << nombre << endl;

     return 0;
}


#include <iostream>
#include <string.h>

using namespace std;

int main(){

     char *nombre;
     cout << "Nombre(s):" << endl;
     cin >> nombre;
     cout << nombre << endl;

     return 0;
}


Como se habrán dado cuenta, ya no sé ni qué estoy haciendo :xD . Con el estrés de la semana y el poco tiempo que he tenido para investigar, pues he decidido pedirles ayuda.

Soy relativamente nuevo en C/C++, vengo de la onda web (PHP, javascript) y Python, en donde esto es 1000 veces más simple  :¬¬

PD: El punto es realizarlo en C++.

Gracias por su ayuda ;D

Salu2

rir3760

El problema se debe al uso del operador ">>", cuando su operando es de tipo "char *" este lee (y almacena en la dirección indicada) una palabra. La solución es utilizar la función std::istream::getline, una opción mejor es utilizar la clase string y la función std::getline.

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

GenR_18

Cita de: rir3760 en 21 Septiembre 2013, 02:51 AM
El problema se debe al uso del operador ">>", cuando su operando es de tipo "char *" este lee (y almacena en la dirección indicada) una palabra. La solución es utilizar la función std::istream::getline, una opción mejor es utilizar la clase string y la función std::getline.

Un saludo

Gracias por la ayuda, solucionado  ;D

Salu2