1

だから私はこの出力が欲しい:

Position you wanted to insert
2

Value You wanted to insert
34

Array after insertion:
10 5 34 46 2 100 97 

しかし、それは私に出力を表示することはできません。

#include <stdio.h>
#include <conio.h>

int main(){
    int arr[100] = {10, 5, 46, 2, 100, 97};
    int n, max, i;
    n = 0;

    clrscr();
    if(i > n){
        printf("postion you wanted to insert");
        scanf("%d", &n);
    }

    printf("Value for position: \n");
    scanf("%d", &max);

    for(i=7; i>n-1; i--){
        arr[i+1] = arr[i];
        arr[n] = max;
    }

    printf("Array after insertion: \n");
    for(i = 0; i < 7; i++){
        printf("%d\t", arr[i]);
    }

    getch();
}
4

8 に答える 8

1

挿入するインデックスの後にアイテムを移動するループ (つまり、最初のループ) が間違っています。配列を 6 つのエントリ (index0から へ) で開始し5ます。ただし、次に index でループを開始します。7つまり、 へ移動arr[7]arr[8]ます。

しかし、それはそのループの問題の始まりにすぎません。次にarr[n]、各ループで挿入する値を設定します。そのため、その値の元の値を移動したい場合は、arr[n]すでに何度も上書きされています。

于 2013-08-09T13:55:18.187 に答える
0

これはうまくいくはずです:

int main ()
{
    int arr[100] = {10, 5, 46, 2, 100, 97};
    int n = 6; //Number of elements in arr
    int pos = 0;
    int value = 0;
    clrscr();

    printf("postion you wanted to insert");
    scanf("%d", &pos);

    printf("Value for position: \n");
    scanf("%d", &value);

    int i;
    for (i = n ; i > pos ; --i)
        arr[i] = arr[i - 1];
    arr[pos] = value;
    ++n;

    printf("New array:\n");
    for (i = 0 ; i < 0 ; ++i)
         printf("%d ", arr[i]);

    getch ();
 }
于 2013-08-09T13:54:59.880 に答える
0

これが一般的な解決策です。配列に既に存在する要素の数に注意する必要があります。注 : 可能なすべての位置に挿入できるようにする場合は、2 番目の if ステートメントを無効にします。

それがあなたを助けるのを手伝ってください:

#include <stdio.h>
#define MAX_EL 100
int main() {
int arr[MAX_EL] = {10, 5, 46, 2, 100, 97};
int n, max, i;
int nb_elements = 6 ;
n = 0;
i = 0 ;


printf("postion you wanted to insert :\n");
scanf("%d", &n);


printf("Value for position: \n");
scanf("%d", &max);

if (nb_elements >= MAX_EL) {
   fprintf(stderr,"Tab is full ! \n") ;
   return -1 ;
}

if (n>nb_elements-1)
    n = nb_elements ;

int arr_tmp[MAX_EL] ;
for (;i<n;i++) {
   arr_tmp[i] = arr[i] ;
}
arr_tmp[n] = max ;
for (i=n;i<nb_elements+1;i++)
  arr_tmp[i+1] = arr[i] ;

nb_elements++ ;

memcpy(&arr[0],&arr_tmp[0],sizeof(int)*nb_elements) ;

printf("Array after insertion: \n");
for(i = 0; i < nb_elements; i++) {
printf("%d\t", arr[i]);
}

出力が得られます:

10 5 34 46 2 100 97
于 2013-08-09T14:29:18.130 に答える