Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C中打印范围内的数组?_C - Fatal编程技术网

如何在C中打印范围内的数组?

如何在C中打印范围内的数组?,c,C,我尝试为数组创建一个菜单,但当我创建一个函数来打印一个范围内的数组时,例如,我向数组输入45、65、78、87、98,当我选择4时,最小值是45,最大值是87,输出值是45、65、78、87、43。我真的不知道43是从哪里来的,每次我测试它,43总是在输出的末尾,有人能帮我吗 #include<stdio.h> #include<stdlib.h> #define MAXN 100 int isFull(int*a, int n) { return n==MAXN;

我尝试为数组创建一个菜单,但当我创建一个函数来打印一个范围内的数组时,例如,我向数组输入45、65、78、87、98,当我选择4时,最小值是45,最大值是87,输出值是45、65、78、87、43。我真的不知道43是从哪里来的,每次我测试它,43总是在输出的末尾,有人能帮我吗

#include<stdio.h>
#include<stdlib.h>
#define MAXN 100
int isFull(int*a, int n)
{   return n==MAXN;
}
int add(int value, int*a, int*pn)
{   a[*pn]=value;
    (*pn)++;
}
int isEmpty(int*a, int n)
{   return n==0;
}
int search(int x, int*a, int n)
{   int i;
    for(i=0; i<n; i++) if(a[i]==x) return i;
    return -1;
}
void print(int*a, int n)
{   int i;
    for(i=0; i<n; i++)
    printf("%d,", a[i]);
}
void printvalueinrange(int*a, int n)
{   int i, min, max;
    printf("Enter minimum value:");
    scanf("%d", &min);
    printf("Enter maximum value:");
    scanf("%d", &max);
    for(i=0; i<=sizeof(a); i++)
    if(a[i]>=min&&a[i]<=max) printf("%d,", a[i]);
}
void ascSort(int*a, int n)
{   int minIndex;
    int i, j;
    for(i=0;i<n-1;i++)
    {   minIndex=i;
        for(j=i+1;j<n;j++)
        if(a[minIndex]>a[j]) minIndex=j;
        if(minIndex>i)
        {   int t=a[minIndex];
            a[minIndex]=a[i];
            a[i]=t;
        }
    }
    for(i=0;i<n;i++) printf("%d,", a[i]);
}
int main()
{   int n=0, i, choice, a[MAXN], value, pos, min, max;
    do
    {
        printf("\n1-Add a value\n");
        printf("2-Search a value\n");
        printf("3-Print out the array\n");
        printf("4-Print out values in a range\n");
        printf("5-Print out the array in ascending order\n");
        printf("6-Quit\n");
        printf("Select an operation\n=====================\n");
        scanf("%d", &choice);
        switch(choice)
        {   case 1: 
                if(isFull(a,n)) printf("Sorry, there is no more space for you to add more value.\n");
                else
                {   printf("Input an added value:");
                    scanf("%d", &value);
                    add(value, a, &n);
                    printf("Added\n");
                }
                break;
            case 2:
                if(isEmpty(a,n)) printf("Sorry, the array is empty.\n");
                else
                {   printf("Input the value you want to search:");
                    scanf("%d", &value);
                    int pos=search(value, a, n);
                    if(pos<0)   printf("Not found!\n");
                    else printf("Position is found:%d\n", pos);
                }
                break;
            case 3:
                if(isEmpty(a,n)) printf("Sorry, the array is empty.\n");
                else print(a,n);
                break;
            case 4:
                if(isEmpty(a,n)) printf("Sorry, the array is empty.\n");
                else printvalueinrange(a,n);
                break;
            case 5:
                if(isEmpty(a,n)) printf("Sorry, the array is empty.\n");
                else ascSort(a,n);
                break;
            default : printf("Have a nice day!\n");
        }
    }
    while(choice>0 && choice<6);
    getchar();
    return 0;
}
#包括
#包括
#定义最大值100
整数已满(整数*a,整数n)
{返回n==MAXN;
}
整数相加(整数值,整数*a,整数*pn)
{a[*pn]=值;
(*pn)+;
}
int-isEmpty(int*a,int-n)
{返回n==0;
}
整数搜索(整数x,整数*a,整数n)
{int i;

对于(i=0;i在
printvalueinrange
函数中,您使用
sizeof(a)
这是错误的,因为
a
是一个指针,获取其大小将给出指针的大小,而不是它所指向的大小。请使用
n
,就像在其他函数中一样


当然,将循环终止条件从
更改为将for循环条件更正为:for(i=0;i