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)
#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'
CodePudding user response:
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;