c - c 中的菜单驱动程序,用于对数组执行各种操作

标签 c arrays

<分区>

以下是我的 c 程序,它对数组执行各种操作。当我删除任何元素时,delete_ele 函数会删除并正确显示数组,但遍历函数会显示一些垃圾值。例如。如果最初我有 4 个元素并删除第一个元素,则 delete_ele 函数将显示剩余的 3 个元素,但遍历函数显示 4 个元素(剩余的 3 个元素以及末尾的垃圾值)。请告诉我错误。

#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();
}

最佳答案

因为你正在递减 delete_ele() 中的局部变量 (len)

尝试:

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]);
        }
    }
}

为了分享len

同样适用于 insert_ele()

关于c - c 中的菜单驱动程序,用于对数组执行各种操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21383306/

相关文章:

c - 为什么使用常量被认为比使用文字更好的编程风格?

c - 使用泰勒级数逼近 sin(x) 直到项的绝对值低于某个实值

javascript - 使用js对象值

javascript - 如何使用reduce查找元素并构建数组对象?

c - GCC编译错误类型冲突

c - bison -d 创建头文件无法正确包含头文件

arrays - 分配给数组时的编译错误 - VBA (Excel)

javascript - 通过比较 Javascript 中的 2 个数组来查找丢失的元素

php 在数组范围内查找值

c - 尝试用C语言制作霍夫曼树,但它一直显示堆缓冲区溢出