Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Mala ejecución de estructura

Estas en el tema de Mala ejecución de estructura en el foro de C/C++ en Foros del Web. @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código C++: Ver original #include<iostream> #include<stdio.h> #include <stdlib.h> #include <time.h>     using namespace std ;   struct clientes     {   ...
  #1 (permalink)  
Antiguo 24/11/2012, 12:01
 
Fecha de Ingreso: agosto-2012
Ubicación: Alcalá
Mensajes: 37
Antigüedad: 11 años, 7 meses
Puntos: 0
Mala ejecución de estructura

Código C++:
Ver original
  1. #include<iostream>
  2. #include<stdio.h>
  3. #include <stdlib.h>
  4. #include <time.h>
  5.  
  6.  
  7. using namespace std;
  8.  
  9. struct clientes
  10.     {
  11.         char nombre [50];  
  12.         int numero_unidades;
  13.         float precio;
  14.         char estado; //p: pagado, m: moroso, a: atrasado
  15.     };
  16.    
  17. void leer_clientes (clientes *listado)
  18. {
  19.  
  20.  
  21.     cout<<"Introduzca el nombre del cliente: ";
  22.     cin.getline(listado->nombre, 50);
  23.     cout<<"Introduzca el numero de unidades: ";
  24.     cin>>listado->numero_unidades;
  25.     cout<<"Introduzca el precio: ";
  26.     cin>>listado->precio;
  27.     cout<<"Introduzca el estado (p: pagado, m: moroso, a: atrasado): ";
  28.     cin>>listado->estado;
  29.    
  30. }
  31. void escribe_clientes (clientes listado)
  32. {
  33.      cout <<"Nombre del cliente: "<<listado.nombre<<endl;
  34.      cout <<"Numero de unidades: "<<listado.numero_unidades<<endl;
  35.      cout <<"Precio: "<<listado.precio<<" €"<<endl;
  36.      cout <<"Estado: ";
  37.      switch (listado.estado)
  38.        {
  39.         case 'p': cout <<"pagado"; break;
  40.         case 'm': cout <<"moroso"; break;
  41.         case 'a': cout <<"atrasado"; break;
  42.         default: cout <<"Estado no válido"; break;                
  43.        }
  44.      cout<<endl;
  45.      
  46. }
  47.  
  48. int main()
  49. {  
  50.     clientes listado [3];
  51.     for (int i=0; i<3; i++)
  52.     {
  53.      leer_clientes (&listado[i]);
  54.      escribe_clientes (listado[i]);
  55.     }
  56.    
  57.     system("PAUSE");
  58.     return EXIT_SUCCESS;
  59.  
  60. }

Compila bien. Lo ejecuto, me pide los datos del primero cliente listado[0], le meto los datos, me los escribe y me empieza a pedir los datos del segundo...
Aquí me aparece:

Introduzca el nombre del cliente: Introduzca el numero de unidades:

No puedo introducir el nombre del cliente, se salta el espacio... no sé si es un problema con el cin.getline.. quizás no se puede usar dos veces no sé..

Alguna idea? gracias

Pd: por qué no aparecen las palabras tildadas en la ejecución en ms dos? como por ejemplo "Estado no válido" que aparece "Estado no vßlido"

Última edición por antonio715; 24/11/2012 a las 12:04 Razón: añadir postdata
  #2 (permalink)  
Antiguo 26/11/2012, 21:09
 
Fecha de Ingreso: julio-2012
Mensajes: 133
Antigüedad: 11 años, 9 meses
Puntos: 22
Respuesta: Mala ejecución de estructura

Hola Antonio.

Cita:
Lo ejecuto, me pide los datos del primero cliente listado[0], le meto los datos, me los escribe y me empieza a pedir los datos del segundo...
Aquí me aparece:
Introduzca el nombre del cliente: Introduzca el numero de unidades:
No puedo introducir el nombre del cliente, se salta el espacio...
Podés hacer:
Código C++:
Ver original
  1. ...
  2.  for (int i=0; i<3; i++) {
  3.    leer_clientes (&listado[i]);
  4.    while(cin.get()!='\n');
  5.    escribe_clientes (listado[i]);
  6.   }
  7. ...
Cita:
por qué no aparecen las palabras tildadas en la ejecución en ms dos?
Es debido a que la consola de windows utiliza caracteres unicode, pero podés hacerte una función para presentar los mensajes que contengan acentos o eñes:
Código C++:
Ver original
  1. void consout(const char *cadena)
  2. {
  3.   int i;
  4.   for(i=0;i<strlen(cadena);i++){
  5.     switch(cadena[i]){
  6.       case 'á': printf("\240");    break;
  7.       case 'é': printf("\202");    break;
  8.       case 'í': printf("\241");    break;
  9.       case 'ó': printf("\242");    break;
  10.       case 'ú': printf("\243");    break;
  11.       case 'ñ': printf("%c",-92);  break;
  12.       case 'Ñ': printf("%c",-91);  break;
  13.       case 'Á': printf("%c",-75);  break;
  14.       case 'É': printf("%c",-112); break;
  15.       case 'Í': printf("%c",-42);  break;
  16.       case 'Ó': printf("%c",-32);  break;
  17.       case 'Ú': printf("%c",-23);  break;
  18.       default: printf("%c",cadena[i]); break;
  19.     }
  20.   }
  21. }

Saludos.
  #3 (permalink)  
Antiguo 29/11/2012, 10:01
 
Fecha de Ingreso: agosto-2012
Ubicación: Alcalá
Mensajes: 37
Antigüedad: 11 años, 7 meses
Puntos: 0
Respuesta: Mala ejecución de estructura

Gracias por la respuesta, el programa funciona bien ahora. Lo que no entiendo es el uso de
Código C++:
Ver original
  1. while(cin.get()!='\n');
Suponía que el uso de while era distinto.. while (condicion) sentencia; pero while (condicion); no lo entiendo.. si la condición se cumple qué pasa? a qué sentencia se aplica?

Gracias :)
  #4 (permalink)  
Antiguo 29/11/2012, 10:55
 
Fecha de Ingreso: diciembre-2011
Ubicación: CABA
Mensajes: 433
Antigüedad: 12 años, 3 meses
Puntos: 94
Respuesta: Mala ejecución de estructura

En este caso se puede decir que la sentencia se ejecuta en la condicion (no es obligatorio tener siempre una sentencia)
Cita:
si la condición se cumple qué pasa? a qué sentencia se aplica?
al no haber sentencia no se ejecuta nada, la idea del bucle es limpiar el bufer del teclado para evitar los problemas q tenias antes


Saludos

Etiquetas: estructura, int
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:09.