我如何使我代码删除或更新c结构中的数据?

wnavrhmk  于 2022-12-22  发布在  其他
关注(0)|答案(1)|浏览(82)

我的代码应该能够删除已创建结构中的数据,也应该能够更新某些结构中的数据,但当我访问“删除”或“更新”选项并选择结构名称时,程序只是终止。

删除-〉“borrar”(第6种情况)
更新-〉“实现者”(案例5)

#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;
}

我在控制台中收到以下错误:

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'

**我尝试添加库:<string.h>

但我也会遇到以下错误:**

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'
rqcrx0a6

rqcrx0a61#

那么这些错误是由这个引起的

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

num_tacos是一个整型数,为什么要使用strcpy呢?

aux[cont].num_tacos = Taque[j].num_tacos;

相关问题