[ Foro de C ]
Hola, estoy teniendo unos problemas para poder hacer un ejercicio, tengo que hacer unas acciones, cargar, mostrar que reciban un registro que dentro contenga un arreglo y la cantidad de nombres cargados. y después funciones llena y vacía que reciban el registro también y me devuelvan verdadero o falso. y por ultimo una acciones que es insertar que recibe el registro y un nuevo nombre y lo que debe hacer es agregar este nombre al final del arreglo. y una acción suprimir que recibe el registro y suprime el primero nombre. esto es lo que tengo
#include<stdio.h>
#include<stdbool.h>
#include<string.h>
#define max 1000
typedef struct
{
char Nombres[max+1];
int cant;
}TNombres;
bool Vacio(TNombres verificacion);
bool llena(TNombres verificacion);
void insertar(TNombres *verificacionc,char *nombreInsertar);
void mostrar(TNombres verificacion);
void cargar(TNombres *verificacion);
int main(){
TNombres nombre;
char insertarnombre;
bool vacio;
int i;
bool estara;
printf("ingrese la cantidad de nombres a cargar ");
scanf("%d",&nombre.cant);
vacio=Vacio(nombre);
if(vacio){
printf("arreglo vacio ");
}else{
cargar(&nombre);
}
mostrar(nombre);
estara=llena(nombre);
if(estara){
printf("arreglo lleno");
}else{
insertar(&nombre,&insertarnombre);
printf("%d",&nombre.cant);
}
mostrar(nombre);
}
bool Vacio(TNombres verificacion){
if(verificacion.cant == 0){
return true; // arreglo vacio
}else
{
return false; // arreglo no vacio
}
}
bool llena(TNombres verificacion){
if(verificacion.cant==max){
return true; // arreglo lleno
}else{
return false; //arreglo no lleno
}
}
void insertar(TNombres *verificacion, char *nombreInsertar){
printf("ingrese nuevo nombre ");
scanf("%s",&nombreInsertar);
(*verificacion).cant=(*verificacion).cant+1;
(*verificacion).Nombres[(*verificacion).cant]=*nombreInsertar;
}
void mostrar(TNombres verificacion){
int i;
printf("los nombres ingresados son\n");
for(i=0;i<verificacion.cant;i++){
//printf("%s\n",&verificacion.Nombres[i]);
puts(&verificacion.Nombres[i]);
}
}
void cargar(TNombres *verificacion){
int i;
printf("ingrese los nombres\n");
for(i=0;i<(*verificacion).cant;i++){
scanf("%s",&(*verificacion).Nombres[i]);
}
}
a la hora de mostrar lo que pasa es que me muestra el ultimo nombre dependiendo de la cantidad de nombres cargado, y me los muestra el primero con la primera letra del primer y segundo nombre, el segundo con la primer letra del segundo y el ultimo normal. y bueno después cuando llega a insertar si el arreglo esta lleno se ejecuta mostrar y si tengo que insertar un nombre no se ejecuta, si pongo max como 10 y lleno el arreglo se me hace un bucle infinito entonces puse el max+1 para poder comprobar esa opcion
la verdad es que tienes un buen lio montado
además TNombres me parece absurdo ya que según
dices todos tendrían el mismo número, la
cantidad de nombres, lo cual no tiene sentido
a menos que el número de cada nombre en la
estructura sea el número de indice lo cual
también es rebundante
el lio empieza porque en tu programa no hay
ningun array de TNombres solo hay un elemento
llamado nombre que usas como un array que no es
deberias tener un contador de registros usados
para incrementar o decrementar y saber el límite
antes de llamar a insertar o suprimir
verificar si el nombre es correcto antes de salir
de insertar, por cierto es una patata ya que no
sabes copiar un array en otro, copias siempre el
mismo caracter
mi recomendación es que tengas clara la lógica del
programa con un diagrama de flujo y hagas
comprobaciones de cada cosa con un debuger o con
impresiones y ver que lo que hace el programa es lo
que esperas que haga y así avances poco a poco
cualquier duda pasa por aquí
suerte ;-)
(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.)