2017-06-26 8 views
1

私は配列のメニューを作ろうとしますが、範囲内の配列を出力する関数を作成すると、例えば、4とを選択すると配列に45,65,78,87,98を入力しますminは45、maxは87、出力は45,65,78,87,43です。私は実際にどこから来ているのかわかりませんが、テストするたびに常に出力の最後に43人がいますお願い助けて。 aがポインタであり、その大きさを得ることがあなたにそれが指すものをポインタとないの大きさを与えるため、間違っているあなたがsizeof(a)を使用し、あなたのprintvalueinrange機能でCで範囲内の配列を印刷するには?

#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; 
} 
+0

forループ条件を次のように修正します。for(i = 0; i suraj

答えて

1

。代わりに他の機能と同様にnを使用してください。

もちろん、ループ終了条件を<=から<に変更すると、範囲外になることはありません。 他の機能と同じように