我的代码应该能够删除已创建结构中的数据,也应该能够更新某些结构中的数据,但当我访问“删除”或“更新”选项并选择结构名称时,程序只是终止。
删除-〉“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'
1条答案
按热度按时间rqcrx0a61#
那么这些错误是由这个引起的
num_tacos是一个整型数,为什么要使用strcpy呢?