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;
}
}
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 (http://www.cplusplus.com/reference/istream/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
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;
}
}
La función system (http://www.cplusplus.com/reference/cstdlib/system/), pertenece a la biblioteca estándar cstdlib (http://www.cplusplus.com/reference/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.