0

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!

PaperBirdMaster
  • 44,474
  • 6
  • 44
  • 82
Gaspar
  • 1

0 Answers0