1

帮帮我....没有编译时错误,但有一些我无法解决的逻辑错误。从用户那里获取输入没有任何问题,但元素没有被插入。输出是用户输入的未更改数组。

void insert(int*,int);

void main()
{
    int a[10];
    int i,n,pos,x,j,z;
    clrscr();
    printf("Enter Size Of an array: ");
    scanf("%d",&n);
    printf("Enter Elements of an array: ");
    for(i=0;i<n;i++)
    {
        scanf("%d",a+i);
    }
    insert(a,n);
    printf("\nArray after Insertion of elements at 2nd & 5th Position\n");
    for(i=0;i<n;i++)
    {
        printf("\t%d\t",*a+i);
    }
    getch();
}

void insert(int *b, int n)
{
    if(n>=1)
    {
        printf("Insert Element at 2nd Position: ");
        scanf("%d",b+1);
    }
    if(n>=4)
    {
        printf("Insert Element at 5th Position: ");
        scanf("%d",b+4);
    }
}
4

5 回答 5

3

您的输出是错误的,这是由于*a+i被解释为(*a)+i. 当您输入除直接序列以外的其他内容时,这也会显示而无需任何修改:

Enter Size Of an array: 3
Enter Elements of an array: 1 2 9

给出输出:

1       2       3

这显然是不对的。

正如其他几个答案中提到的那样,解决方案是用括号括起来你的指针算术:*(a+i)

于 2013-08-25T19:42:25.517 回答
2

“输出是用户输入的未更改数组。”

使固定 :-

for(i=0;i<n;i++)
{
    printf("\t%d\t",*(a+i));  //Notice `()`
}

仅供参考..这不是插入,这只是覆盖!

对于插入,您可能会有以下内容:

/*
   b= original array
   n= size of array (must be large enough)
   pos = position of insertion

  After call make sure to scan array till n+1
*/
 void insert(int *b, int n, int pos)
 {
   int val,c;
   printf("Enter the value to insert\n");
   scanf("%d", &val);

   for (c = n - 1; c >= pos - 1; c--)
      b[c+1] = b[c];

   b[pos-1] = val;
 }
于 2013-08-25T19:33:47.543 回答
1

您应该尝试在 a+i 周围使用括号,例如

void main()
{
    int a[10];
    int i,n,pos,x,j,z;
    clrscr();
    printf("Enter Size Of an array: ");
    scanf("%d",&n);
    printf("Enter Elements of an array: ");
    for(i=0;i<n;i++)
    {
        scanf("%d",a+i);
    }
    insert(a,n);
    printf("\nArray after Insertion of elements at 2nd & 5th Position\n");
    for(i=0;i<n;i++)
    {
        printf("\t%d\t", /*SEE HERE */ *(a+i));
    }
    getch();
}
于 2013-08-25T19:38:01.137 回答
1
for(i=0;i<n;i++)
{
    printf("\t%d\t",*(a+i));  //parenthesis added.
}

“(a + i)”周围的括号非常重要,因为它与星号一起表示该地址中的值。像这样的错误很难找到,因为它们非常小,但对代码有很大的影响。

于 2018-08-01T17:21:30.610 回答
0

最后,我在@P0W 和@Mats 指出的错误的帮助下解决了这个问题,并且还应用了在任何用户定义的位置插入元素的概念。多谢你们!!所以这是更正的代码。(并且它正在插入元素而不是替换它)。

void insert(int*,int);
void main()
{
int a[10];
int i,n,pos,x,j,z;
clrscr();
printf("Enter Size Of an array: ");
scanf("%d",&n);
printf("Enter Elements of an array: ");
for(i=0;i<n;i++)
{
    scanf("%d",a+i);
}
insert(a,n);
printf("\nArray after Insertion of elements at 2nd & 5th Position\n");
for(i=0;i<n;i++)
{
    printf("\t%d\t",*(a+i));
}
getch();
}
void insert(int *b, int n)
{
int j;
if(n>=1)
{
    printf("Insert Element at 2nd Position: ");
    for(j=n-1;j>=1;j--)
    {
        b[j+1]=b[j];
    }
    scanf("%d",b+1);
}
if(n>=4)
{
    printf("Insert Element at 5th Position: ");
    for(j=n-1;j>=4;j--)
    {
        b[j+1]=b[j];
    }
    scanf("%d",b+4);

}
}
于 2013-08-25T20:06:42.890 回答