[ Foro de C ]

Ayuda con un bucle en C

18-Apr-2020 10:53
Nacho Cabanes (+64)
0 Respuestas

También puedes incluir el código directamente en este foro. Confírmame que es éste:


/*Incluímos las librerias que consideremos necesarias*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>

/*Definimos el numero máximo de empleados (valor inalterable)*/
#define DIM 500

/*Definimos la variable i (valor variable)*/
int i,j,k,l;
char sb;
unsigned int buscarnumident;

/*Hacemos y preparamos la estructura empleado, con todos los datos a rellenar*/
struct empleado
{    
char nombre[20];
char apellido[20];
unsigned int numidentif;
int edad;
int anyo;
int proyectos;
char nombreproyecto[60];
int presupuestoproyecto;
}lista[DIM];

/*Creamos una función para recoger los datos del empleado*/
void pedir_datos(){

for(i=0;i<DIM;i++){
		
		if(lista[i].edad==0){
		
		fflush(stdin);
 		printf("\nIntroduce el n%cmero indentificativo: ",163);
 		scanf("%u",&lista[i].numidentif);
 		
 		fflush(stdin);
 		printf("\nIntroduce el nombre del empleado: ");
 		scanf("%s",&lista[i].nombre);
 		
 		fflush(stdin);
 		printf("\nIntroduce el apellido del empleado: ");
 		scanf("%s",&lista[i].apellido);
 		
 		fflush(stdin);
 		printf("\nIntroduce la edad del empleado: ");
 		scanf("%i",&lista[i].edad);
 		
 		fflush(stdin);
 		printf("\nIntroduce el a%co de nacimiento del empleado: ",164);
 		scanf("%i",&lista[i].anyo);
 		
 		}
 		
 		else
		 {
		 	i++;
		 }
 		
 		break;
	}
}

/*Creamos una función para mostrar los datos del empleado*/
void mostrar_datos(){
	
	for(k=0;k<(i+1);k++){
		
		printf("\n");
		printf("\nDatos del empleado: %i",k+1);
		printf("\n-----------------------------------");
		printf("\nN%cmero indentificativo: %u",163,lista[k].numidentif);
		printf("\nNombre del empleado: %s",lista[k].nombre);
		printf("\nApellido del empleado: %s",lista[k].apellido);
		printf("\nEdad del empleado: %i",lista[k].edad);
		printf("\nA%co de nacimiento del empleado: %i",164,lista[k].anyo);
		printf("\nN%cmero de proyectos en los que trabaja: %i",163,lista[k].proyectos);
		printf("\n");
		
		for (l=0;l<lista[i].proyectos;l++)
 		
		 {
		 	printf("\n");
 			printf("\n Proyecto n%cmero: %i",163,l+1);
 			printf("\n");
 			printf("\n Nombre del proyecto: %s",lista[i].nombreproyecto);
 			printf("\n Presupuesto del proyecto: %i",lista[i].presupuestoproyecto);
		 }
	}
	
	printf("\n");
}

void eliminar_empleado(){
}

void modificar_datos(){
}

void listar_proyectos(){
}

void asignar_proyecto(){
	
	if ()
	for(i=0;i<DIM;i++){
	
	printf("Introduce el n%cmero identificativo del empleado: ",163);
	scanf("%u",&buscarnumident);
	
	if (lista[i].numidentif==buscarnumident){
		
	fflush(stdin);
 		printf("\nIntroduce el n%cmero de proyectos en los que trabaja: ",163);
 		scanf("%i",&lista[i].proyectos);
 		
	if (lista[i].proyectos>10)
		{
 		printf("\nError, introduce m%cximo 10 proyectos",160);
 		printf("\nIntroduce el n%cmero de proyectos en los que trabaja: ",163);
 		scanf("%i",&lista[i].proyectos);
 		}
	
	for (l=0;l<lista[i].proyectos;l++)
 		{
 			printf("\n Proyecto n%cmero: %i",163,l+1);
 			printf("\n");
 			printf("\n Introduce el nombre del proyecto: ");
 			scanf("%s",&lista[i].nombreproyecto);
 			printf("\n Introduce el presupuesto del proyecto: ");
 			scanf("%i",&lista[i].presupuestoproyecto);
		 }
	}
	break;
}
}

void darbaja_proyecto(){
}

void guardar_fichero(){
}

void cargar_fichero(){
}

/*Hacemos la función principal que contiene el menú y los submenús*/
int main()
{
 
 int opcion;
 
 for(;;){
 
 printf("\n Men%c de gesti%cn de empleados",163,162);
 printf("\n--------------------------------");
 printf("\n1. Introducir nuevo empleado");
 printf("\n2. Eliminar un empleado");
 printf("\n3. Modificar datos de un empleado");
 printf("\n4. Lista de proyectos de empleado");
 printf("\n5. Asignar a un empleado un nuevo proyecto");
 printf("\n6. Dar de baja un proyecto de un empleado");
 printf("\n7. Listar todos los empleados y sus datos");
 printf("\n8. Guardar en fichero");
 printf("\n9. Cargar de fichero");
 printf("\n10. Salir del programa");
 printf("\n");
 printf("\n Introduce una opci%cn: ",162);
 scanf("%i", &opcion);
 
 	if(opcion==1){
 		
 		pedir_datos();
 	}
 	if(opcion==2){
 		
 		eliminar_empleado();
 	}
 	if(opcion==3){
 		
 		modificar_datos();
 	}
	if(opcion==4){
 		
 		listar_proyectos();
 	}
	if(opcion==5){
 		
 		asignar_proyecto();
 	}
	if(opcion==6){
 		
 		darbaja_proyecto();
 	}	
	if(opcion==7){
 		
 		mostrar_datos();
 	}
 	if(opcion==8){
 		
 		guardar_fichero();
 	}
 	if(opcion==9){
 		
 		cargar_fichero();
 	}
 	if(opcion==10){
 		printf("\nA continuaci%cn el programa se cerrar%c",162,160);
 		return 0;
 	}
	}
}


 
Si es así, y te refieres a la función "asignar_proyecto", el problema parece estar en que haces "scanf("%s",&lista[i].nombreproyecto);" a pesar de que está dentro de un bucle "for" cuya letra de control es la "l".




(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)