将元素插入c中一维数组中的特定位置

时间:2013-08-09 13:46:04

标签: c

所以我想要这个输出:

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

8 个答案:

答案 0 :(得分:2)

您没有为int i分配任何值,因此编译器会将垃圾值分配给变量i,因此您无法获得输出。

你需要做这样的事情

void main()
{
 int n,val,i;
 int arr[100] = {10,20,30,40,50};
 printf("enter the position where you want to insert the new element \n");
 scanf("%d",&n);
 print("Enter the value you want to insert");
 scanf("%d",&val);

 for(i=5,i>=n,i--)
  {
   arr[i+1]=arr[i];
   }
arr[n]=max;
/*then print your array*/
getch();
}

答案 1 :(得分:1)

在要插入的索引(即第一个循环)之后移动项目的循环是错误的。您使用六个条目(索引05启动数组。但是您开始使用索引7进行循环,这意味着您将arr[7]移动到arr[8]

但这只是该循环问题的 start 。您然后在每个循环中将arr[n]设置为您要插入的值。因此,当您想要移动arr[n]的原始值时,该值已被多次覆盖。

答案 2 :(得分:0)

你这样做:

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

但是i未初始化。

试试这个:

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

 int main(){
     int arr[100] = {10, 5, 46, 2, 100, 97};
     int n, max, i = 7;
     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();
 }

但你不需要这个条件if(i > n)

答案 3 :(得分:0)

您不需要if声明:

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

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

    clrscr();
    // no need for if statement here
    printf("postion you wanted to insert");
    scanf("%d", &n);

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

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

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

    getch();
}

if语句使用您尚未初始化的i。由于您想要求用户提供职位,因此您不需要if声明。

您还需要修复for循环(i以6开头,您需要arr[i] = max代替arr[n] = max。)

答案 4 :(得分:0)

变化

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

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

答案 5 :(得分:0)

修正:

for(i=5; i>=n-1; i--) { //Start from end of array till n-1
arr[i+1] = arr[i]; 
 }
arr[n-1] = max; // Make room for new element & insert at last

答案 6 :(得分: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 ();
 }

答案 7 :(得分:0)

这是一个通用的解决方案。您必须小心数组中已存在的元素数量。 注意:如果您希望能够在所有可能的位置插入,请禁用第二个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