fallo al introducir datos!!

Iniciado por chicainge, 20 Agosto 2014, 00:26 AM

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

chicainge

Hola tengo un problemiya al leer los datos, pongo el nombre y se acaba el programa porque pasa esto?? y otra cosa, el getline es como se introduce una cadena en el string?? GRACIASSS:)

/*3-Una farmacia desea almacenar sus productos en una estructura. De cada producto hay
que almacenar la siguiente información: código, nombre, descripción (cadena de
caracteres), laboratorio, proveedor, precio y fecha de caducidad. Diseñar la estructura de
datos y un procedimiento que permita introducir los datos de un medicamento en esa
estructura.*/

#include <iostream>

using namespace std;

typedef struct{

unsigned codigo;
char nombre;
string descripcion;
char laboratorio;
char proveedor;
unsigned precio;
unsigned fechacaducidad;

}producto;

typedef producto P[20];

int main(){
P p;
cout<<"introduce el producto: "<<endl;
cout<<"NOMBRE: ";
cin>>p[0].nombre;
cout<<endl<<"CODIGO: ";
cin>>p[0].codigo;
cout<<endl<<"PRECIO: ";
cin>>p[0].precio;
cout<<endl<<"DESCRIPCION: ";
getline(cin,p[0].descripcion);
cout<<endl<<"LABORATORIO: ";
cin>>p[0].laboratorio;
cout<<endl<<"PROVEEDOR: ";
cin>>p[0].proveedor;
cout<<endl<<"FECHA DE CADUCIDAD(INTRODUCIR DIAMESAÑO): ";
cin>>p[0].fechacaducidad;

}

ivancea96

Nombre es char, no string. Revisa los tipos.

rir3760

Cita de: chicainge en 20 Agosto 2014, 00:26 AMtengo un problemiya al leer los datos, pongo el nombre y se acaba el programa porque pasa esto?
Porque, como ya te comento ivancea96, el campo nombre debe ser de tipo string, no char. Mismo caso con los campos laboratorio y proveedor.

Cita de: chicainge en 20 Agosto 2014, 00:26 AMy otra cosa, el getline es como se introduce una cadena en el string?
El operador ">>" se utiliza para leer y almacenar una palabra en un string, cuando se desea leer una linea de texto se utiliza getline. Esa función la debes utilizar para asegurarte de leer los campos mencionados completos.

Otro detalle importante es el uso intercalado del operador ">>" con getline, el problema ahí es que usualmente el operador ">>" ignora el espacio pero getline no lo hace. La solución es descartar el resto de la linea con, por ejemplo, la función miembro ignore.

Una forma mas sencilla pero que funciona solo en el caso base (cada linea terminada inmediatamente con el avance de linea) es:
Código (cpp) [Seleccionar]
cout << "NOMBRE: ";
getline(cin, p[0].nombre);

cout << "CODIGO: ";
cin >> p[0].codigo;

cout << "PRECIO: ";
cin >> p[0].precio;
cin.get();

cout << "DESCRIPCION: ";
getline(cin, p[0].descripcion);

cout << "LABORATORIO: ";
getline(cin, p[0].laboratorio);

cout << "PROVEEDOR: ";
getline(cin, p[0].proveedor);

cout << "FECHA DE CADUCIDAD(INTRODUCIR DIAMESAÑO): ";
cin >> p[0].fechacaducidad;


Por supuesto una vez leas los datos del registro debes hacer algo útil con ellos.

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