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

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();
}
于 2013-08-09T13:49:14.833 回答
1

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

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

于 2013-08-09T13:55:18.187 回答
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
于 2013-08-09T14:29:18.130 回答
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)

于 2013-08-09T13:48:45.633 回答
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)。

于 2013-08-09T13:51:39.617 回答
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;
于 2013-08-09T13:53:48.520 回答
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
于 2013-08-09T13:54:10.360 回答
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 回答