c语言中的菜单驱动程序,用于对数组执行各种操作
下面是我的c程序,它对数组执行各种操作。当我删除任何元素时,delete_ele函数会删除并正确显示数组,但traverse函数会显示一些垃圾值。例如,如果最初我有4个元素并删除了第一个元素,delete_ele函数将显示剩余的3个元素,但是遍历函数将显示4个元素(剩余的3个元素以及末尾的垃圾值)。请告诉我错误c语言中的菜单驱动程序,用于对数组执行各种操作,c,arrays,C,Arrays,下面是我的c程序,它对数组执行各种操作。当我删除任何元素时,delete_ele函数会删除并正确显示数组,但traverse函数会显示一些垃圾值。例如,如果最初我有4个元素并删除了第一个元素,delete_ele函数将显示剩余的3个元素,但是遍历函数将显示4个元素(剩余的3个元素以及末尾的垃圾值)。请告诉我错误 #include<stdio.h> #include<conio.h> void insert_ele(int i,int ar[],int len){
#include<stdio.h>
#include<conio.h>
void insert_ele(int i,int ar[],int len){
int ele, loc;
printf("\nEnter element to be inserted : ");
scanf("%d",&ele);
printf("\nEnter location : ");
scanf("%d",&loc);
if(i==19){
printf("\nOverflow");
}
else{
while(i>=loc){
ar[i+1]=ar[i];
i--;
}
ar[loc]=ele;
len++;
printf("\nNew Array : ");
for(i=0;i<len;i++){
printf("\t%d",ar[i]);
}
}
}
void delete_ele(int i,int ar[],int len){
int loc;
printf("\nEnter location of element to be deleted : ");
scanf("%d",&loc);
if(len==0){
printf("\nUnderflow");
}
else{
for(i=loc;i<len;i++){
ar[i]=ar[i+1];
}
len--;
printf("\nNew Array : ");
for(i=0;i<len;i++){
printf("\t%d",ar[i]);
}
}
}
void find_ele(int i,int ar[],int len){
int ele, count=0;
printf("\nEnter element to be searched : ");
scanf("%d",&ele);
for(i=0;i<len;i++){
if(ar[i]==ele){
count++;
}
}
if(count == 0){
printf("\nElement does not exist");
}
else{
printf("\nElement found %d times",count);
}
}
void traverse(int i, int ar[], int len){
printf("\nTotal number of Elements are : %d",len);
printf("\nElements are : ");
for(i=0; i<len; i++){
printf("\t%d",ar[i]);
}
}
void main(){
int ar[20], i=0, len=0, ch;
char choice;
clrscr();
printf("\nEnter number of elements you want to insert : ");
scanf("%d",&len);
for(i=0; i<len; i++){
printf("Enter element %d : ",i);
scanf("%d",&ar[i]);
}
i--;
label:
printf("\nPress 1 to insert, 2 to delete, 3 to find any element");
printf("\n or 4 to traverse the array : ");
scanf("%d",&ch);
switch(ch){
case 1:insert_ele(i, ar, len);
break;
case 2:delete_ele(i, ar, len);
break;
case 3:find_ele(i, ar, len);
break;
case 4:traverse(i, ar, len);
break;
default:printf("\nInvalid Option");
break;
}
printf("\nPress y to continue or any other key to quit : ");
scanf("%s",&choice);
if(choice=='y' || choice=='Y'){
goto label;
}
getch();
}
#包括
#包括
无效插入元素(整数i,整数ar[],整数len){
国际电气公司,loc;
printf(“\n要插入的输入元素:”);
scanf(“%d”、&ele);
printf(“\n输入位置:”);
scanf(“%d”、&loc);
如果(i==19){
printf(“\nOverflow”);
}
否则{
while(i>=loc){
ar[i+1]=ar[i];
我--;
}
ar[loc]=ele;
len++;
printf(“\n新数组:”);
对于(i=0;i一个错误是:delete_ele()
函数调用未定义的行为,因为当len
值为20
时,for循环中的数组索引超出范围(请阅读注释):
for(i=loc;i
应该是:
for(i = loc; i < len-1; i++){ # replaced `len` by `len - 1`
ar[i] = ar[i + 1];
}
for(i=loc;i
其他函数中也有类似的错误。其中一个错误是:delete_ele()
函数调用未定义的行为,因为当len
值为20
时,for循环中的数组索引超出范围(请阅读注释):
for(i=loc;i
应该是:
for(i = loc; i < len-1; i++){ # replaced `len` by `len - 1`
ar[i] = ar[i + 1];
}
for(i=loc;i
在其他函数中也有类似的错误。问题是main
中的len
没有通过delete\u ele
和insert\u ele
更新。
通过值将len
传递给这些函数。然后在相应函数内更新本地副本,但main中的len
保持不变
纠正此问题的一种方法是通过引用将len
传递到delete\u ele
和insert\u ele问题是main
中的len
不能通过delete\u ele
和insert\ele
进行更新。
通过值将len
传递给这些函数。然后在相应函数内更新本地副本,但main中的len
保持不变
纠正此问题的一种方法是通过引用将len
作为指针传递到delete\u ele
和insert\u ele
,因为您在delete\ele()
中递减局部变量(len
)
尝试:
void delete_ele(int i,int ar[],int*len){
int loc;
printf(“\n输入要删除元素的位置:”;
scanf(“%d”、&loc);
如果(*len==0){
printf(“\nUnderflow”);
}
否则{
对于(i=loc;i<(*len-1);i++){
ar[i]=ar[i+1];
}
(*len)--;
printf(“\n新数组:”);
对于(i=0;i,因为在delete_ele()
尝试:
void delete_ele(int i,int ar[],int*len){
int loc;
printf(“\n输入要删除元素的位置:”;
scanf(“%d”、&loc);
如果(*len==0){
printf(“\nUnderflow”);
}
否则{
对于(i=loc;i<(*len-1);i++){
ar[i]=ar[i+1];
}
(*len)--;
printf(“\n新数组:”);
对于(i=0;i您是否尝试过单步执行调试器中的代码并检查变量的状态?这应该会让您直接找到您的错误。@PaulR是否可能重复?我不认为是重复的,尽管可以找到简单的错误,但标记为重复是无效的。您是否尝试过单步执行调试器中的代码并检查变量的状态?这应该直接带你们到你们的错误。可能重复的@paurr是重复的吗?我不认为,虽然简单的错误可以找到,但标记重复是无效的。对不起,我应该评论,但编辑,重点是条件应该是(*len-1)
Ops,对不起Grijesh,我没有看到这一点,可以随意编辑很多Hanks。工作起来很有魅力…@rippy检查循环条件应该是*len-1
,否则当len=20
时,它会给数组出索引问题。另外在之后添加空格;
对不起,我应该注释,但需要编辑,重点是条件应该是(*len-1)
Ops,对不起,Grijesh,我没看到,可以自由编辑大量的Hanks。工作起来很有魅力…@rippy检查循环条件应该是*len-1
,否则当len=20
时会给数组出索引问题。在之后也添加空格;
void delete_ele(int i, int ar[], int *len){
int loc;
printf("\nEnter location of element to be deleted : ");
scanf("%d", &loc);
if(*len == 0){
printf("\nUnderflow");
}
else{
for(i=loc; i< (*len - 1); i++){
ar[i] = ar[i + 1];
}
(*len)--;
printf("\nNew Array : ");
for(i=0; i<*len; i++){
printf("\t%d", ar[i]);
}
}
}