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

在c中的一维数组中的特定位置插入元素,c,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};

所以我想要这个输出:

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();
}
#包括
#包括
int main(){
int-arr[100]={10,5,46,2100,97};
int n,max,i;
n=0;
clrsc();
如果(i>n){
printf(“您希望插入的职位”);
scanf(“%d”和“&n”);
}
printf(“位置值:\n”);
扫描频率(“%d”和最大值);
对于(i=7;i>n-1;i--){
arr[i+1]=arr[i];
arr[n]=最大值;
}
printf(“插入后的数组:\n”);
对于(i=0;i<7;i++){
printf(“%d\t”,arr[i]);
}
getch();
}
您正在这样做:

 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();
 }
#包括
#包括
int main(){
int-arr[100]={10,5,46,2100,97};
int n,max,i=7;
n=0;
clrsc();
如果(i>n){
printf(“您希望插入的职位”);
scanf(“%d”和“&n”);
}
printf(“位置值:\n”);
扫描频率(“%d”和最大值);
对于(i=7;i>n-1;i--){
arr[i+1]=arr[i];
arr[n]=最大值;
}
printf(“插入后的数组:\n”);
对于(i=0;i<7;i++){
printf(“%d\t”,arr[i]);
}
getch();
}

但是,如果(i>n)

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

如果
语句:

#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();
}
#包括
#包括
int main(){
int-arr[100]={10,5,46,2100,97};
int n,max,i;
n=0;
clrsc();
//这里不需要if语句
printf(“您希望插入的职位”);
scanf(“%d”和“&n”);
printf(“位置值:\n”);
扫描频率(“%d”和最大值);
对于(i=6;i>n-1;i--){
arr[i+1]=arr[i];
arr[i]=最大值;
}
printf(“插入后的数组:\n”);
对于(i=0;i<7;i++){
printf(“%d\t”,arr[i]);
}
getch();
}
if
语句使用了您尚未初始化的
i
。由于您希望向用户请求职位,因此不需要
if
语句

您还需要修复
for
循环(
i
以6开头,您需要执行
arr[i]=max
而不是
arr[n]=max
)。

更改

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

修正:

这应该起作用:

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 ();
 }
int main()
{
int-arr[100]={10,5,46,2100,97};
int n=6;//arr中的元素数
int pos=0;
int值=0;
clrsc();
printf(“您希望插入的职位”);
scanf(“%d”和“&pos”);
printf(“位置值:\n”);
scanf(“%d”,和值);
int i;
对于(i=n;i>pos;--i)
arr[i]=arr[i-1];
arr[pos]=值;
++n;
printf(“新数组:\n”);
对于(i=0;i<0;++i)
printf(“%d”,arr[i]);
getch();
}

在要插入的索引(即第一个循环)之后移动项目的循环是错误的。您以六个条目开始数组(索引
0
5
),然后开始循环索引
7
,这意味着您将移动
arr[7]
arr[8]


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

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

那么我如何分配它并获得排序的数组删除if(i>n)条件,只需选择用户希望插入新值的位置,清空该位置并在该位置输入新值。这仅对第一个
if
语句重要。在循环中使用时,它会被初始化。您还犯了一个错误,即分配了arr[n]=循环模块中的max,这样每次循环运行时,位置n将具有max值,将其置于循环外部。代码中存在未定义的行为:当声明局部变量
i
时,其值将变得未定义,除非对其进行初始化。在
if(i>n)中使用它之前,需要对其进行初始化
statement.output无法获取我它给了我复制的元素没有像您要插入的位置那样移动:位置的2值:23插入后的数组:10 5 23 23 2 100 97不是10 5 23 46 2 100 97我要第二次输出
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 ();
 }
#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