Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Rhythmical en 30 Septiembre 2017, 06:43 am



Título: No me compila el for en C
Publicado por: Rhythmical en 30 Septiembre 2017, 06:43 am
Holas a todos, espero que esten bien, mi siguiente problema es que al compilar el programa solamente me muestra lo primero pero lo que son los for lo omite finalizando el programa.

(https://i.imgur.com/PovFmXZ.png)

este es el código

Código
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4.  
  5. typedef char cadena[50];
  6.  
  7. struct RegistroFecha
  8. {
  9. int day;
  10. int month;
  11. int year;
  12.  
  13. };
  14.  
  15. struct RegistroEmpleado
  16. {
  17. int   legajo;
  18. cadena apynom;
  19. cadena cargo;
  20. float sueldo;
  21. RegistroFecha ingreso;
  22. RegistroFecha born;
  23. };
  24.  
  25. const int employer = 10;
  26.  
  27. main()
  28. {
  29. int N=0;
  30. RegistroEmpleado vec[employer];
  31. printf("\nIngrese la cantidad de empleados: ");scanf("%d",&N);
  32.  
  33. for(int i=0;N<=i;i++)
  34. {
  35. system("cls");
  36. printf("\nEmpleado Nro %d", i+1);
  37. printf("\nLegajo: ");scanf("%d",&vec[i].legajo);
  38. printf("\nApellido y nombre: "); _flushall();gets(vec[i].apynom);
  39. printf("\nCargo: "); _flushall();gets(vec[i].cargo);
  40. printf("\nSueldo: ");scanf("%f",&vec[i].sueldo);
  41. printf("\n**Fecha de ingreso**: ");
  42. printf("\nDia: ");scanf("%d",&vec[i]. ingreso.day);printf(" Mes: ");scanf("%d",&vec[i].ingreso.month);printf(" A%co");scanf("%d",&vec[i].ingreso.year);
  43. printf("\n**Fecha de nacimiento**: ");
  44. printf("\nDia: ");scanf("%d",&vec[i]. born.day);printf(" Mes: ");scanf("%d",&vec[i].born.month);printf(" A%co");scanf("%d",&vec[i].born.year);
  45. }
  46.  
  47. for(int i=0;N<=i;i++)
  48. {
  49. printf("\nEmpleado Nro %d", i+1);
  50. printf("\nLegajo: ",vec[i].legajo);
  51. printf("\nApellido y nombre:" ,vec[i].apynom);
  52. printf("\nCargo: ",vec[i].cargo);
  53. printf("\nSueldo: ",vec[i].sueldo);
  54. printf("\n**Fecha de ingreso**: ");
  55. printf("\n%d/%d/%d" ,vec[i]. ingreso.day,vec[i].ingreso.month,vec[i].ingreso.year);
  56. printf("\n**Fecha de nacimiento**: ");
  57. printf("\n%d/%d/%d" ,vec[i]. born.day,vec[i].born.month,vec[i].born.year);
  58. }
  59. printf("\n\n");
  60. system("pause");  
  61. }

Espero su ayuda, saludos cordiales.


Título: Re: No me compila el for en C
Publicado por: biestable en 30 Septiembre 2017, 08:14 am
No estoy seguro porque tengo C algo olvidado, pero intenta...

en vez de esto

for(int i=0;N<=i;i++)
{

declara la variable fuera del for, asi:

int i;
for( i=0; i<=N; i++)
{
...
}

y en el segundo bucle:
for( i=0; i<=N; i++)
{...}

y además supongo que lo de N<=i ¿es un lapsus? y querías poner i<=N
ya que de no ser así, en la primera iteración se cumpliría que N es mayor que i (si el usuario ha introducido un valor mayor que 0) y se saldría del bucle


Título: Re: No me compila el for en C
Publicado por: class_OpenGL en 30 Septiembre 2017, 22:51 pm
En tu código tienes la condición "N<=i". Inicialmente, i vale 0 (es lo que has indicado en el for). N vale lo que el usuario haya introducido (en este ejemplo, 2). Entonces, la comparación inicial sería "2<=0". Como puedes ver, eso va a dar false. Por eso no se ejecuta el for.

No estoy seguro porque tengo C algo olvidado, pero intenta...

en vez de esto

for(int i=0;N<=i;i++)
{

declara la variable fuera del for, asi:

int i;
for( i=0; i<=N; i++)
{
...
}

y en el segundo bucle:
for( i=0; i<=N; i++)
{...}

y además supongo que lo de N<=i ¿es un lapsus? y querías poner i<=N
ya que de no ser así, en la primera iteración se cumpliría que N es mayor que i (si el usuario ha introducido un valor mayor que 0) y se saldría del bucle


Respecto a eso, si que se permite declarar variables dentro del campo de inicialización del for en C (a partir de una versión que no recuerdo)


Título: Re: No me compila el for en C
Publicado por: JavierScars en 1 Octubre 2017, 04:33 am
Lo mas probable es que sea por el standar con el que estas compilando...
Intenta usando
Código:
-std=c99
En la linea de comando cuando vallas a compilar.
O si no
Código:
--std=gnu99

En cualquier caso el declarar la variable dentro del for esta visto como "mala practica" por muchos (en C, para C++ esta bien) y lo que se recomienda es declarar todo al inicio del programa/función.