Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

how can I make my code delete or update data in a c structure?

My code should be able to delete data within a created structure, and it should also be able to update data in some structure, but when I access the "delete" or "update" option and choose the structure name, the program simply terminates.

delete -> "borrar" (case 6)

update -> "actualizar" (case 5)

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

#include <stdlib.h>
#include <stdio.h>
#include <locale.h>
//Have functions
//One of them returns information
//A menu that has the options to:
//add, display, search,
//get statistical data
//update, delete and exit
//All in files

struct Taqueria {
    char Nombre[50];
    int num_tacos;
    char verdura[3];
    char salsa[3];
    int tacos;
    char favorito[20];
};

int
main()
{
    setlocale(LC_ALL, "");
    struct Taqueria Taque[30],
     Taqueria2,
     aux[50];
    int i = 0,
        j = 0,
        opc,
        Existe,
        cont;
    FILE *Archivo;
    size_t res;                         // Guarda un valor numerico
    int n;
    char nomb[50];

    printf("*******TacMajal**********\n");
    printf("*********MENU***********\n");
    printf(" 1).....TACOMIENDO........(taco de bisteck.)...............$10 \n");
    printf(" 2).....TACOBELICO.........(taco de al pastor.)............$15 \n");
    printf(" 3).....TACOSTADO..........(taco de cabeza)................$15 \n");
    printf(" 4).....TACORRIENDO.........(taco de barbacoa).............$10 \n");
    printf(" 5).....MISTERTACO..........(taco de arracherra)...........$20 \n");
    printf(" 6).....TAJODIDO............(taco de frijoles con chorizo).$10 \n");
    printf(" 7).....TACOOL..............(taco de suadero)..............$10 \n");
    printf(" .............................................................\n");
    printf(" 8).....TACONSUERTE.........(2x1 en tacos los viernes)........\n");
    printf(" .............................................................\n\n");

    do {
        printf("1.- Agregar\n");
        printf("2.- Mostrar\n");
        printf("3.- Buscar\n");
        printf("4.- Obtener datos estadisticos.\n");
        printf("5.- Actualizar\n");
        printf("6.- Borrar\n");
        printf("7.- Salir\n");
        scanf("%d", &opc);

        switch (opc) {
        case 1:
            printf("¿Cuantas personas van a pedir tacos?");
            scanf("%d", &n);
            // Solicita información al usuario
            for (i = 0; i < n; i++) {
                printf("Nombre de la persona que va ordenar: ");
                scanf("%s", &Taque[i].Nombre);
                printf("Numero de tacos: ");
                scanf("%d", &Taque[i].num_tacos);
                printf("¿Que tipo de taco quiere, joven?\n");
                scanf("%d", &Taque[i].tacos);
                printf("¿Quiere verdura en sus tacos? " "(Responda con Si o no)" ": ");
                scanf("%s", &Taque[i].verdura);
                printf("¿Quiere salsa? " "(Responda con Si o no): " "");
                scanf("%s", &Taque[i].salsa);
                printf("Una pregunta, ¿cual es su taco favorito del menu del TacMajal, jefe? \n");
                scanf("%s", &Taque[i].favorito);
            }

            // Guardar información en el archivo
            Archivo = fopen("Tacmajal.bin", "w");
            if (Archivo == NULL) {
                printf("El archivo no se pudo abrir");
                exit(0);
            }
            else {
                res = fwrite(Taque, sizeof(struct Taqueria), 1, Archivo);   // Nombre estructura, tipo dato, tot datos a guardar,nombre de la estructura
                if (res != 1) {
                    printf("No se guardaron correctamente\n");
                }
                else {
                    printf("Se guardo correctamente\n");
                }
                if (fclose(Archivo) != 0) {
                    printf("No se ha podido cerrar el archivo\n");
                    exit(0);
                }
            }
            break;

        case 2:

            Archivo = fopen("Tacmajal.bin", "r");
            if (Archivo == NULL) {
                printf("El archivo no se pudo abrir");
                exit(0);
            }
            else {
                while (!feof(Archivo)) {

                    res = fread(&Taqueria2, sizeof(struct Taqueria), 1, Archivo);
                    if (res != 1) {
                        printf("Error\n");
                        break;
                    }
                    else {
                        printf("Nombre: %s\n", Taqueria2.Nombre);
                        printf("Numero de tacos:  %d\n", Taqueria2.num_tacos);
                        printf("Tipo de tacos: %d\n", Taqueria2.tacos);
                        printf("Verdura: %s\n", Taqueria2.verdura);
                        printf("Salsa: %s\n", Taqueria2.salsa);
                        printf("Taco Favorito: %s\n", Taqueria2.favorito);
                    }
                }
                fclose(Archivo);
            }
            break;

        case 3:
            Archivo = fopen("Tacmajal.bin", "r");
            if (Archivo == NULL) {
                printf("El archivo no se pudo abrir");
                exit(0);
            }
            else {

                printf("Buscar orden por nombre...\n\n");
                Existe = 0;
                printf("nombre a buscar: ");
                scanf("%s", &nomb);
                n = -1;
                while (!feof(Archivo)) {
                    n++;
                    res = fread(&Taqueria2, sizeof(struct Taqueria), 1, Archivo);
                    if (res != 1) {
                        printf("Error\n");
                        break;
                    }
                    else {
                        printf("Nombre: %s\n", Taqueria2.Nombre);
                        printf("Numero de tacos:  %d\n", Taqueria2.num_tacos);
                        printf("Tipo de tacos: %d\n", Taqueria2.tacos);
                        printf("Verdura: %s\n", Taqueria2.verdura);
                        printf("Salsa: %s\n", Taqueria2.salsa);
                        printf("Taco Favorito: %s\n", Taqueria2.favorito);
                    }
                }
                fclose(Archivo);
                for (i = 0; i < n; i++) {
                    if (strcmp(Taque[i].Nombre, nomb) == 0) {
                        Existe = 1;
                        printf("Nombre: %s\n", Taque[i].Nombre);
                        printf("Numero de tacos:  %d\n", Taque[i].num_tacos);
                        printf("Tipo de tacos: %d\n", Taque[i].tacos);
                        printf("Verdura: %s\n", Taque[i].verdura);
                        printf("Salsa: %s\n", Taque[i].salsa);
                        printf("Taco Favorito: %s\n", Taque[i].favorito);
                    }
                }
                if (Existe == 0) {
                    printf("No existen los datos de %s, estamos trabajando en ello, gracias por su paciencia. \n", nomb);
                }

            }

            break;

        case 4:
            break;

        case 5:
            Archivo = fopen("Tacmajal.bin", "r");
            if (Archivo == NULL) {
                printf("El archivo no se pudo abrir");
                exit(0);
            }
            else {

                printf("Buscar orden por nombre para modificar...\n\n");
                Existe = 0;
                printf("Nombre a buscar: ");
                scanf("%s", &nomb);
                i = -1;
                while (!feof(Archivo)) {
                    i++;
                    res = fread(&Taqueria2, sizeof(struct Taqueria), 1, Archivo);
                    if (res != 1) {
                        printf("Error\n");
                        break;
                    }
                    else {
                        printf("Nombre: %s\n", Taqueria2.Nombre);
                        printf("Numero de tacos:  %d\n", Taqueria2.num_tacos);
                        printf("Tipo de tacos: %d\n", Taqueria2.tacos);
                        printf("Verdura: %s\n", Taqueria2.verdura);
                        printf("Salsa: %s\n", Taqueria2.salsa);
                        printf("Taco Favorito: %s\n", Taqueria2.favorito);
                    }
                }
                fclose(Archivo);

                for (i = 0; i < n; i++) {
                    if (strcmp(Taque[i].Nombre, nomb) == 0) {
                        Existe = 1;
                        printf("Nombre: %s\n", Taqueria2.Nombre);
                        printf("Nuevo nombre: ");
                        scanf("%s", &Taque[i].Nombre);
                        printf("Numero de tacos:  %d\n", Taqueria2.num_tacos);
                        printf("Nueva decisión: ");
                        scanf("%d", &Taque[i].num_tacos);
                        printf("Tipo de tacos: %d\n", Taqueria2.tacos);
                        printf("Nueva decisión:");
                        scanf("%d", &Taque[i].tacos);
                        printf("Verdura: %s\n", Taqueria2.verdura);
                        printf("Nueva decisión: ");
                        scanf("%s", &Taque[i].verdura);
                        printf("Salsa: %s\n", Taqueria2.salsa);
                        printf("Nueva decisión: ");
                        scanf("%s", &Taque[i].salsa);
                        printf("Taco Favorito: %s\n", Taqueria2.favorito);
                        printf("Nueva decisión: ");
                        scanf("%s", &Taque[i].verdura);
                    }
                }
                if (Existe == 0) {
                    printf("No existen los datos de %s, estamos trabajando en ello, gracias por su paciencia. \n", nomb);
                }

            }
            break;

        case 6:
            Archivo = fopen("Tacmajal.bin", "r");
            if (Archivo == NULL) {
                printf("El archivo no se pudo abrir");
                exit(0);
            }
            else {
                i = -1;
                while (!feof(Archivo)) {
                    i++;
                    res = fread(&Taqueria2, sizeof(struct Taqueria), 1, Archivo);

                }
                printf("Buscar orden por nombre para borrar...\n\n");
                printf("Nombre a buscar: ");
                scanf("%s", &nomb);
                cont = 0;
                for (j = 0; j < i; j++) {
                    if (strcmp(nomb, Taqueria2.Nombre) != 0) {
                        strcpy(aux[cont].Nombre, Taque[j].Nombre);
                        strcpy(aux[cont].num_tacos, Taque[j].num_tacos);
                        strcpy(aux[cont].verdura, Taque[j].verdura);
                        strcpy(aux[cont].salsa, Taque[j].salsa);
                        strcpy(aux[cont].favorito, Taque[j].favorito);
                        cont++;
                    }
                }
                for (j = 0; j < cont; j++) {
                    strcpy(Taque[j].Nombre, aux[j].Nombre);
                    strcpy(Taque[j].num_tacos, aux[j].num_tacos);
                    strcpy(Taque[j].verdura, aux[j].verdura);
                    strcpy(Taque[j].salsa, aux[j].salsa);
                    strcpy(Taque[j].favorito, aux[j].favorito);
                }
                if (cont == i) {
                    printf("No existen los datos de %s, estamos trabajando en ello, gracias por su paciencia. \n", nomb);
                }
                else {
                    i = cont;
                    printf("Se borró satisfactoriamente la orden de %s\n", nomb);
                }
            }
            fclose(Archivo);
            break;

        case 7:
            printf("Nos vemos pronto.");
            break;

        }

    } while (opc <= 6);
    return 0;
}

I get these errors in the console:

In function 'main':

289 35  C:\Users\Taqueria.c [Warning] passing argument 1 of 'strcpy' makes pointer from integer without a cast

51  18  C:\Program Files (x86)\Dev-Cpp\MinGW64\x86_64-w64-mingw32\include\string.h  [Note] expected 'char * __restrict__' but argument is of type 'int'

289 56  C:\Users\Taqueria.c [Warning] passing argument 2 of 'strcpy' makes pointer from integer without a cast

51  18  C:\Program Files (x86)\Dev-Cpp\MinGW64\x86_64-w64-mingw32\include\string.h  [Note] expected 'const char * __restrict__' but argument is of type 'int'

299 35  C:\Users\Taqueria.c [Warning] passing argument 1 of 'strcpy' makes pointer from integer without a cast

51  18  C:\Program Files (x86)\Dev-Cpp\MinGW64\x86_64-w64-mingw32\include\string.h  [Note] expected 'char * __restrict__' but argument is of type 'int'

299 55  C:\Users\Taqueria.c [Warning] passing argument 2 of 'strcpy' makes pointer from integer without a cast

51  18  C:\Program Files (x86)\Dev-Cpp\MinGW64\x86_64-w64-mingw32\include\string.h  [Note] expected 'const char * __restrict__' but argument is of type 'int'

**I tried adding the library: <string.h>

but I get these errors too:**

C:\Users\Taqueria.c In function 'main':


290 35  C:\Users\Taqueria.c [Warning] passing argument 1 of 'strcpy' makes pointer from integer without a cast

2   0   C:\Users\Taqueria.c In file included from C:\Users\Taqueria.c

51  18  C:\Program Files (x86)\Dev-Cpp\MinGW64\x86_64-w64-mingw32\include\string.h        [Note] expected 'char * __restrict__' but argument is of type 'int'

290 56  C:\Users\Taqueria.c [Warning] passing argument 2 of 'strcpy' makes pointer from integer without a cast

2   0   C:\Users\Taqueria.c In file included from C:\Users\Taqueria.c

51  18  C:\Program Files (x86)\Dev-Cpp\MinGW64\x86_64-w64-mingw32\include\string.h  [Note] expected 'const char * __restrict__' but argument is of type 'int'

300 35  C:\Users\Taqueria.c [Warning] passing argument 1 of 'strcpy' makes pointer from integer without a cast

2   0   C:\Users\Taqueria.c In file included from C:\Users\Taqueria.c

51  18  C:\Program Files (x86)\Dev-Cpp\MinGW64\x86_64-w64-mingw32\include\string.h  [Note] expected 'char * __restrict__' but argument is of type 'int'

300 55  C:\Users\Taqueria.c [Warning] passing argument 2 of 'strcpy' makes pointer from integer without a cast

2   0   C:\Users\Taqueria.c In file included from C:\Users\Taqueria.c

51  18  C:\Program Files (x86)\Dev-Cpp\MinGW64\x86_64-w64-mingw32\include\string.h  [Note] expected 'const char * __restrict__' but argument is of type 'int'

>Solution :

well those errors are caused by this

 strcpy(aux[cont].num_tacos, Taque[j].num_tacos);

num_tacos is an int, why use strcpy. You need

      aux[cont].num_tacos = Taque[j].num_tacos;
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading