No me compila el for en C

Iniciado por Rhythmical, 30 Septiembre 2017, 06:43 AM

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

Rhythmical

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.



este es el código

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

typedef char cadena[50];

struct RegistroFecha
{
int day;
int month;
int year;

};

struct RegistroEmpleado
{
int   legajo;
cadena apynom;
cadena cargo;
float sueldo;
RegistroFecha ingreso;
RegistroFecha born;
};

const int employer = 10;

main()
{
int N=0;
RegistroEmpleado vec[employer];
printf("\nIngrese la cantidad de empleados: ");scanf("%d",&N);

for(int i=0;N<=i;i++)
{
system("cls");
printf("\nEmpleado Nro %d", i+1);
printf("\nLegajo: ");scanf("%d",&vec[i].legajo);
printf("\nApellido y nombre: "); _flushall();gets(vec[i].apynom);
printf("\nCargo: "); _flushall();gets(vec[i].cargo);
printf("\nSueldo: ");scanf("%f",&vec[i].sueldo);
printf("\n**Fecha de ingreso**: ");
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);
printf("\n**Fecha de nacimiento**: ");
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);
}

for(int i=0;N<=i;i++)
{
printf("\nEmpleado Nro %d", i+1);
printf("\nLegajo: ",vec[i].legajo);
printf("\nApellido y nombre:" ,vec[i].apynom);
printf("\nCargo: ",vec[i].cargo);
printf("\nSueldo: ",vec[i].sueldo);
printf("\n**Fecha de ingreso**: ");
printf("\n%d/%d/%d" ,vec[i]. ingreso.day,vec[i].ingreso.month,vec[i].ingreso.year);
printf("\n**Fecha de nacimiento**: ");
printf("\n%d/%d/%d" ,vec[i]. born.day,vec[i].born.month,vec[i].born.year);
}
printf("\n\n");
system("pause"); 
}


Espero su ayuda, saludos cordiales.

biestable

#1
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

class_OpenGL

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.

Cita de: 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


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)

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL

JavierScars

Lo mas probable es que sea por el standar con el que estas compilando...
Intenta usando
-std=c99
En la linea de comando cuando vallas a compilar.
O si no
--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.
Usa lo malo de la vida a tu favor, escala montañas de problemas para deslizarte sobre soluciones, derrumba muros de decepciones para encontrar la libertar de la felicidad,  y quema la leña del fracaso para calentarte con el éxito. Recuerda que sin la oscuridad la luz no brillaría tanto.