Tengo que hacer un código en C el cual tiene un struct
con la cantidad de nombres y los mismos. Además debe tener dos funciones, Vacia
que dirá si la lista esta vacía o no y LLena
que dirá si la lista esta llena y tres acciones, Insertar
que permite introducir la cantidad de personas y sus nombres, Suprimir
que elimina el primer nombre de la lista y al siguiente lo asigna primero y Mostrar
que mostrara todos los nombres de la lista.
El código esta funcionando pero tengo un error en la acción Insertar el cual cuando escribo el nombre solo guarda la primera letra y no se como solucionarlo.
#include <stdio.h>
#include <string.h>
#define MAX 1000
typedef struct{ //arreglo donde se cargaran la cantidad de nombres y los mismos
char nombres[MAX];
int cant;
}TData;
void Insertar(TData *l); //accion que permite insertar un nombre en un arregllo
void Suprimir(TData *l); //accion que elimina el primer nombre del arreglo
void Mostrar(TData l); //accion que muestra todos los nombres de la lista
int Vacia(TData l, int aux); //funcion que verifica si la lista esta vacia
int Llena(TData l, int aux); //funcion que verifica si la lista esta llena por completo
int main(){ //algoritmo principal
TData lista;
int e; //accion a realizar
int aux; //variable auxiliar
char a[1];
char b[] = "n";
lista.cant = 0;
do{
printf("\n[1] - Ingresar nombres a la lista");
printf("\n[2] - Eliminar primer nombre de la lista");
printf("\n[3] - Mostrar la lista");
printf("\n[4] - Verificar si la lista esta vacia");
printf("\n[5] - Verificar si la lista esta completa");
printf("\n\nIngrese la accion que desea realizar: ");
scanf("%d", &e);
switch(e){
case 1:
Insertar(&lista);
break;
case 2:
if(Vacia(lista,aux) == 1){
printf("\nLista Vacia, no es posible eliminar nombres");
}
else{
Suprimir(&lista);
}
break;
case 3:
Mostrar(lista);
break;
case 4:
if(Vacia(lista,aux) == 1){
printf("\nLa lista esta vacia");
}
else{
printf("\nLa lista no esta vacia");
}
break;
case 5:
if(Llena(lista,aux) == 1){
printf("\nLa lista esta llena");
}
else{
printf("\nLa lista no esta llena");
}
break;
}
printf("\n\nDesea realizar otra accion? (s/n): ");
scanf("%s", &a);
}while(!(strcmp(a,b) == 0));
return 0;
}
void Insertar(TData *l){ //acion que permite insertar un nombre en el arreglo
int i; //variable contador
printf("\nIntroduce cuantos nombres desea insertar: ");
scanf("%d", &l->cant);
for(i = 0; i < l->cant; i++){
printf("\nIngrese el nombre %d: ", i+1);
scanf("%s", &l->nombres[i]);
}
}
void Suprimir(TData *l){ //accion que elimina el primer nombre del arreglo
int i;
l->nombres[0] = 0;
for(i = 0; i < l->cant; i++){
l->nombres[i] = l->nombres[i + 1];
}
l->cant = l->cant - 1;
printf("\n---Se elimino el primer nombre de la lista---");
}
void Mostrar(TData l){ //accion que muestra todos los nombres de la lista
int i;
for(i = 0; i < l.cant; i++){
printf("\nNombre %d: %c", i + 1, l.nombres[i]);
}
}
int Vacia(TData l, int aux){ //funcion que verifica si la lista esta vacia
if(l.cant == 0){
aux = 1;
}
else{
aux = 0;
}
return aux;
}
int Llena(TData l, int aux){ //funcion que verifica si la lista esta lleno por completo
if(l.cant == 1000){
aux = 1;
}
else{
aux = 0;
}
return aux;
}
Desde ya muchas gracias!