Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: iAmChapin_ en 31 Agosto 2015, 02:27 am



Título: Funcion impresa
Publicado por: iAmChapin_ en 31 Agosto 2015, 02:27 am
Buenas! Vengo a molestar nuevamente. Tengo este código y funciona a la perfección, pero me di cuenta de un error en la funcion, al principio era tipo int y returnaba el valor de la variable a, pero al hacer eso me imprimia el numero ingresado, decidi convertirlo a tipo void que no devuelve nada y me salta un error molesto en la linea 82: Illegal structure operation. Pensé que era porque estaba todo junto pero no, aun separandolo por lineas diferentes, siempre me indica el error en el esas lineas, y aun cambiando los ; por << siempre salta uno que otro error. Alguien podria darme una solucion sin que la funcion no devuelva nada? Les dejo el codigo para que puedan ver que pueden cambiar

Código
  1. #include <iostream.h>
  2. #include <conio.h>
  3. #include <windows.h>
  4.  
  5. //FUNCION TRANSFORMAR FECHA
  6. void fechaTransformada(int a){
  7.  
  8. //DETERMINAMOS EL MES INGRESADO CON SWITCH
  9.  switch(a){
  10.  
  11.      case 1:
  12.      textcolor(15); cprintf("Enero");
  13.      break;
  14.  
  15.      case 2:
  16.      textcolor(15); cprintf("Febrero");
  17.      break;
  18.  
  19.      case 3:
  20.      textcolor(15); cprintf("Marzo");
  21.      break;
  22.  
  23.      case 4:
  24.      textcolor(15); cprintf("Abril");
  25.      break;
  26.  
  27.      case 5:
  28.      textcolor(15); cprintf("Mayo");
  29.      break;
  30.  
  31.      case 6:
  32.      textcolor(15); cprintf("Junio");
  33.      break;
  34.  
  35.      case 7:
  36.      textcolor(15); cprintf("Julio");
  37.      break;
  38.  
  39.      case 8:
  40.      textcolor(15); cprintf("Agosto");
  41.      break;
  42.  
  43.      case 9:
  44.      textcolor(15); cprintf("Septiembre");
  45.      break;
  46.  
  47.      case 10:
  48.      textcolor(15); cprintf("Octubre");
  49.      break;
  50.  
  51.      case 11:
  52.      textcolor(15); cprintf("Noviembre");
  53.      break;
  54.  
  55.      case 12:
  56.      textcolor(15); cprintf("Diciembre");
  57.      break;
  58.  
  59.  }
  60.  
  61. }
  62.  
  63. int dia;
  64. int mes;
  65. int cuatro;
  66.  
  67. void main(){
  68.  
  69.   gotoxy(6,4); cprintf("Transformo tu fecha de este tipo: 4/07/2011 asi: 4 de Julio del 2011");
  70.   textcolor(15);
  71.   gotoxy(29,5); cprintf("Ingresa una fecha:");
  72.   textcolor(15);
  73.   gotoxy(33,7); cprintf("/");
  74.   textcolor(15);
  75.   gotoxy(38,7); cprintf("/");
  76.   gotoxy(30,7); cin >> dia;
  77.   gotoxy(35,7); cin >> mes;
  78.   gotoxy(40,7); cin >> cuatro;
  79.   textcolor(15);
  80.   gotoxy(26,9); cprintf("La fecha transformada es:");
  81.   textcolor(15);
  82.   gotoxy(27,11); cout << dia; cprintf(" de "); cout << fechaTransformada(mes); cprintf (" del "); cout << cuatro;
  83.  
  84. getch();
  85.  
  86. }


Título: Re: Funcion impresa
Publicado por: Stakewinner00 en 31 Agosto 2015, 02:40 am
Varias cosas.
1. No existe la lib iostream.h, es "iostream" (sin el .h) ya que las librerías estándar de C++ no acaban en .h
2. la función main debería devolver un int (que usualmente indica si el programa finalizo exitosamente o no)
3.
Código:
 cout << fechaTransformada(mes)
cout no puede imprimir por pantalla una función que no devuelve dato, justamente por eso. Si la función devuelve nada como va a imprimir algo?. En todo caso podrías llamar a la función tal cual. "fechaTranformada(mes)"
4. No tendrían que haber variables globales

Con estos cambios el código final vendría a ser algo como

Código
  1.    #include <iostream>
  2.    #include <conio.h>
  3.    #include <windows.h>
  4.  
  5.    using namespace std;
  6.  
  7.    //FUNCION TRANSFORMAR FECHA
  8.    void fechaTransformada(int a){
  9.  
  10.    //DETERMINAMOS EL MES INGRESADO CON SWITCH
  11.      switch(a){
  12.  
  13.          case 1:  textcolor(15); cprintf("Enero");
  14.          break;
  15.  
  16.          case 2:
  17.          textcolor(15); cprintf("Febrero");
  18.          break;
  19.  
  20.          case 3:
  21.          textcolor(15); cprintf("Marzo");
  22.          break;
  23.  
  24.          case 4:
  25.          textcolor(15); cprintf("Abril");
  26.          break;
  27.  
  28.          case 5:
  29.          textcolor(15); cprintf("Mayo");
  30.          break;
  31.  
  32.          case 6:
  33.          textcolor(15); cprintf("Junio");
  34.          break;
  35.  
  36.          case 7:
  37.          textcolor(15); cprintf("Julio");
  38.          break;
  39.  
  40.          case 8:
  41.          textcolor(15); cprintf("Agosto");
  42.          break;
  43.  
  44.          case 9:
  45.          textcolor(15); cprintf("Septiembre");
  46.          break;
  47.  
  48.          case 10:
  49.          textcolor(15); cprintf("Octubre");
  50.          break;
  51.  
  52.          case 11:
  53.          textcolor(15); cprintf("Noviembre");
  54.          break;
  55.  
  56.          case 12:
  57.          textcolor(15); cprintf("Diciembre");
  58.          break;
  59.  
  60.      }
  61.  
  62.    }
  63.  
  64.  
  65.    int main(){
  66.  
  67.    int dia;
  68.    int mes;
  69.    int cuatro;
  70.  
  71.       gotoxy(6,4); cprintf("Transformo tu fecha de este tipo: 4/07/2011 asi: 4 de Julio del 2011");
  72.       textcolor(15);
  73.       gotoxy(29,5); cprintf("Ingresa una fecha:");
  74.       textcolor(15);
  75.       gotoxy(33,7); cprintf("/");
  76.       textcolor(15);
  77.       gotoxy(38,7); cprintf("/");
  78.       gotoxy(30,7); cin >> dia;
  79.       gotoxy(35,7); cin >> mes;
  80.       gotoxy(40,7); cin >> cuatro;
  81.       textcolor(15);
  82.       gotoxy(26,9); cprintf("La fecha transformada es:");
  83.       textcolor(15);
  84.       gotoxy(27,11); cout << dia; cprintf(" de "); fechaTransformada(mes); cprintf (" del "); cout << cuatro;
  85.  
  86.    getch();
  87.    }



Título: Re: Funcion impresa
Publicado por: iAmChapin_ en 31 Agosto 2015, 02:49 am
Se me olvidó aclarar que trabajo con un compilador viejo, Borland 5.0.2 ya que de momento ese utilizo para los ejercicios de universidad, por lo que si ves cosas obsoletas no les hagas caso (void main, iostream.h). Y excelente, salí de la duda con eso que me explicaste, muchísimas gracias por la ayuda y muchas gracias por la solución amigo!  ;-) ;-) ;-)


Título: Re: Funcion impresa
Publicado por: Stakewinner00 en 31 Agosto 2015, 21:16 pm
Se me olvidó aclarar que trabajo con un compilador viejo, Borland 5.0.2 ya que de momento ese utilizo para los ejercicios de universidad, por lo que si ves cosas obsoletas no les hagas caso (void main, iostream.h). Y excelente, salí de la duda con eso que me explicaste, muchísimas gracias por la ayuda y muchas gracias por la solución amigo!  ;-) ;-) ;-)
No es que sean obsoletas, es que están mal.

en C antes de que se estandarizara muchos usaban void main(), pero en C++ esta especificado que la función main tiene que devolver un int. Tienes un buen post que lo explica https://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html