【发布时间】:2014-08-10 18:10:34
【问题描述】:
我不知道如何擦除结构类型数组的条目。我正在阅读我买的书,但没有关于它的章节,而且我似乎找不到任何功能来做到这一点。我想它与手动相关。我想到了这一点,我能想到的唯一方法是将现有数组的位置更改为想要擦除它的位置,但我不知道该怎么做。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct coches {
int id;
char nombre[10];
char marca[10];
char color[10];
float kilometros;
};
int insertar_datos(struct coches concesionario[30]);
int checkout(char login[10], char password[10]);
void mostrar_datos(struct coches concesionario[30],int x);
void eliminar_datos(struct coches concesionario[30],int x);
int main (void){
struct coches concesionario[30];
int menu, credenciales, x = 0;
char login[10],password[10];
puts("\n<><><>Bienvenido<><><>\n");
puts("\nAntes de poder usar el sistema deber estar autentificado\n");
while (credenciales != 1){
puts("\nDime tu usuario:\n");
scanf("%10s", &login);
puts("\nDime tu password:\n");
scanf("%10s", &password);
credenciales=checkout(login, password);
}
while (menu != 4){
puts("\nQue deseas hacer?\n");
puts("\n1)Insertar datos\n2)Listar coches\n3)Eliminar entradas\n4)Salir del programa\n");
scanf("%d", &menu);
switch(menu){
case 1:
x = insertar_datos(concesionario);
break;
case 2:
mostrar_datos(concesionario,x);
break;
case 3:
eliminar_datos(concesionario,x);
break;
}
}
}
int checkout(char login[10], char password[10]){
if ((strcmp(strlwr(login),"12345") ==0 ) && (strcmp(strlwr(password),"12345") ==0)){
return 1;
}else{
return 0;
}
}
int insertar_datos(struct coches concesionario[30]){
char respuesta[3];
int x = 0;
system("cls");
while (!strstr(respuesta,"no")){
puts("\nDime la id:\n");
fflush(stdin);
scanf("%d", &concesionario[x].id);
system("cls");
puts("\nDime el modelo:\n");
fflush(stdin);
scanf("%10s", &concesionario[x].nombre);
system("cls");
puts("\nDime la marca:\n");
fflush(stdin);
scanf("%10s", &concesionario[x].marca);
system("cls");
puts("\nDime el color:\n");
fflush(stdin);
scanf("%10s", &concesionario[x].color);
system("cls");
puts("\nDime los kilometros:\n");
fflush(stdin);
scanf("%d", &concesionario[x].kilometros);
system("cls");
x++;
puts("\nQuieres insertar algo mas?\n");
fflush(stdin);
scanf("%3s", &respuesta);
system("cls");
strlwr(respuesta);
}
return x;
}
void mostrar_datos(struct coches concesionario[30],int x){
int i;
if (x <= 0){
system("cls");
puts("\nRegistro vacio\n");
}else{
for (i = 0; i < x; i++){
printf("\nID: %d\n\nModelo: %s\n\nMarca: %s\n\nColor: "
"%s\n\nKilometros: %f\n",
concesionario[i].id, concesionario[i].nombre, concesionario[i].marca,
concesionario[i].color, concesionario[i].kilometros);
}
system("pause");
}
}
void eliminar_datos(struct coches concesionario[30],int x){
int i, cuenta = 0;
if (x <= 0){
system("cls");
puts("\nRegistro vacio\n");
}else{
for (i = 0; i < x; i++){
printf("\nEntrada numero:%d\nID: %d\n\nModelo: %s\n\nMarca: %s\n\nColor: "
"%s\n\nKilometros: %f\n", cuenta,
concesionario[i].id, concesionario[i].nombre, concesionario[i].marca,
concesionario[i].color, concesionario[i].kilometros);
cuenta++;
}
puts("\nQue entrada quieres borrar?\n");
}
}
【问题讨论】:
-
是的,您几乎只需覆盖它并将所有后续位置设为 n-1。欢迎来到 C 的美妙土地
-
如果你有一个结构数组,那么你确实可以删除一个元素,方法是将元素移到一个空格后。如果你有不同的记忆组织,你会做不同的事情。如果您有一个指向结构的指针数组,则删除(释放)该结构并将指针向下洗牌。如果您有一个链接列表,您可以从列表中分离要删除的项目,然后删除(释放)已删除的结构。等等。
-
一个简单的数组不能在不移动其他元素的情况下插入或删除元素(大约第一个或最后一个除外)。如果您希望经常这样做,您可能需要使用链表。
-
我不知道它要求很多,但是……你们能不能把代码写下来,让我看看它是如何工作的,谢谢!
-
我现在,但我不知道如何继续这样做,这就是我问的原因,我真的不喜欢这样做。