gpt4 book ai didi

c - 删除 C 上的最后一个数组数据

转载 作者:太空宇宙 更新时间:2023-11-04 03:34:46 27 4
gpt4 key购买 nike

我想做一个简单的编码,当我输入Y时删除最后一个数组数据。

我有这样的代码:

void deletedata(){
//system("cls");
char input;
char nama[50][50];
char nim[50][50];
float ip[50];
printnama();

do{
printf("Wanna delete the last data for sure [Y\N] : ");
scanf("%c",&input);fflush(stdin);
}while(input!='Y' || input!='N');
if(input=='Y'){
nama[count]={" "};
nim[count]={" "};
ip[count]={" "};
printf("Delete Success");
}else if(input=='N'){
printf("Ok");
}
}

在我的 VS2010 Express 中,它说 nama[count] 必须是一个可修改的值。我该怎么办?

首先我输入名字、nim 和号码。然后在 menu3 上我想删除我刚刚输入的最后一个 nama、nim 和 ip。

这是我做的全局变量

int count=0;
char nama[50][50];
char nim[50][50];
float ip[50];

最佳答案

你在这里做什么:

    nama[count]={" "};
nim[count]={" "};
ip[count]={" "};

不是有效的 C 代码,因为您不能显式地将数组分配给 char。在 C 中,你不能从数组中删除,因为它不会存在于内存中,但你可以分配一个 nul 终止符,以防止任何代码在到达最后一个元素后进一步读取。

此外,您永远不会初始化 count,您可以将其替换为函数 strlen 并减去一个以获得数组中的最后一个索引。所以尝试:

    nama[strlen(name)-1][strlen(name[0])-1][0]='\0';
nim[strlen(nim)-1][strlen(nim[0])-1][0]='\0';
for(int i = 0; i < sizeof(ip)/sizeof(ip[0]), ip[i] != 0.0f; i++); // count the elements until you reach a value of 0.0f (this won't work if you have any values with 0.0f in your array)
if(i>=sizeof(ip)/sizeof(ip[0]) i--;
ip[i]=0.0f;

假设 namanim 的最外层维度相同并且 ip 的最内层维度(单一维度)相同length 你可以简单地将 count 设置为 strlen(name[strlen(name)-1])-1 然后做:

    count = strlen(name[strlen(name)-1])-1;
nama[strlen(name)-1][count]='\0';
nim[strlen(nim)-1][count]='\0';
if(ip[0]!=0.0f) ip[count]=0.0f;

您还可以通过添加另一个变量inner_count 来简化,因为您不想多次调用strlen(name)-1。因此,再次假设 namenim 的内部和外部维度的长度始终相同,并且 ip 的长度与外部维度的长度相同您可以做到这一点。

    inner_count = strlen(name)-1;
count = strlen(name[inner_count])-1;
nama[inner_count][count]='\0';
nim[inner_count][count]='\0';
if(inner_count==50) ip[count]=0.0f; // this assumes all arrays have length of 50.

此外,您必须了解的是,您不能真正为 ip 数组分配一个 nul 终止符,也不能使用 sizeof 来确定长度。您可以假设它的长度与您的情况下的其他数组的长度相同,或者通过计数直到达到等于 0.0f 的值来获取长度;

关于c - 删除 C 上的最后一个数组数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33475808/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com