Ayuda leer cadenas y guardarlas en una sola variable

Iniciado por rulax01, 20 Noviembre 2014, 01:54 AM

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

rulax01

Estoy haciendo un programa con estructuras y a la hora de querer guardar un nombre cuando se ingresar un espacio lo guarda en la siguiente variable 



#include <iostream>
#include<windows.h>

using namespace std;

struct cliente {
char nombre[];
int telefono;
char domicilio[];
char articulo[15];
char marca[10];
char modelo[10];
char numser[25];
char dano[];

cliente *next;
};

void insertar(void)
{
    cliente *nuevo = new (cliente);

if (nuevo == NULL )
    cout << "No hay memoria suficiente" << endl;
else{
cout << "Nombre del cliente: " ;
cin >> nuevo ->nombre;
cout << "Telefono: " ;
cin >> nuevo->telefono;
cout << "Domicilio: " ;
cin >> nuevo->domicilio;
cout << "Articulo: " ;
cin >> nuevo->articulo;
cout << "Marca: " ;
cin >> nuevo->marca;
cout << "Modelo: " ;
cin >> nuevo->modelo;
cout << "Numero de Serie: " ;
cin >> nuevo->numser;
cout << "Dano reportado: " ;
cin >> nuevo->dano;
nuevo -> next = NULL;
}

if(LISTA ==NULL){
LISTA = nuevo;
} else {
cliente *tempo = LISTA;
while( tempo->next != NULL)
tempo= tempo -> next;
tempo->next = nuevo;

}
}

rir3760

Cita de: rulax01 en 20 Noviembre 2014, 01:54 AMEstoy haciendo un programa con estructuras y a la hora de querer guardar un nombre cuando se ingresar un espacio lo guarda en la siguiente variable
Eso se debe a que el operador ">>" lee y almacena una palabra. Para solucionarlo debes leer la linea de texto completa mediante la función std::istream::getline teniendo cuidado del uso intercalado del operador ">>" y la mentada función, la solución a ello se encuentra en la base de los foros, solo es cuestión de utilizar su motor de búsqueda.

Otros cambios que se deben realizar al programa son:
* No es necesario incluir el encabezado <windows.h>.
* Falta indicar el numero de elementos de los campos "nombre", "domicilio" y "dano".
* Al reservar memoria mediante new los paréntesis están de mas, eliminalos.
* Para conocer si un puntero es nulo lo políticamente correcto en C++ es la comparación contra cero (en lugar de la macro NULL).

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

rulax01

Sigo sin poder leerlas, cuando corro el programa no me deja ingresarle un valor
Posdata el windos.h lo dejo por que en otra funcion  utilizo system pause y cls 


#include <iostream>
#include <windows.h>


using namespace std;

struct cliente {
char nombre[25];
int telefono;
char domicilio[50];
char articulo[15];
char marca[10];
char modelo[10];
char numser[25];
char dano[125];

cliente *next;
};

void insertar(void)
{
    cliente *nuevo = new cliente;

if (nuevo == NULL )
    cout << "No hay memoria suficiente" << endl;
else{
std::cout << "Nombre del cliente: ";
  std::cin.getline (nuevo->nombre,25);
cout << "Telefono: " ;
cin >> nuevo->telefono;
std::cout << "Domicilio: " ;
std::cin.getline  (nuevo->domicilio,50);
cout << "Articulo: " ;
cin >> nuevo->articulo;
cout << "Marca: " ;
cin >> nuevo->marca;
cout << "Modelo: " ;
cin >> nuevo->modelo;
cout << "Numero de Serie: " ;
cin >> nuevo->numser;
std::cout << "Dano reportado: " ;
std::cin.getline (nuevo->dano,125);
nuevo -> next = NULL;
}

if(LISTA ==NULL){
LISTA = nuevo;
} else {
cliente *tempo = LISTA;
while( tempo->next != NULL)
tempo= tempo -> next;
tempo->next = nuevo;

}
}

zShackra

#3
La función system, pertenece a la biblioteca estándar cstdlib.

Por lo demás, no has seguido todas las sugerencias que rir3760 te ofreció... LISTA no está siquiera declarado, te sugiero, y sin ánimos de ofender... que leas un libro de programación antes de continuar. O si vas a solicitar orientación, que publiques un código más organizado y completo.