【问题标题】:i cannot find any error in my program but it is not giving desired output [duplicate]我在我的程序中找不到任何错误,但它没有提供所需的输出 [重复]
【发布时间】:2013-03-05 14:33:21
【问题描述】:
#include <stdlib.h>
#include <stdio.h>

int main(void)
{

int a[]={1,2,3,4,5};
int b[]={0,0,0,0,0};
int *p;
int i;
p=b;
for( i =0 ; i<5 ; i++)
{
    b[i]=a[i]+1;
    *p=b[i]-1;
    printf(" %i \t %i \t %i \n" ,*p,b[i],a[i]);

}
return 0;
}

我希望输出为:

*p   b   a
 1   2   1
 2   3   2
 3   4   3
 4   5   4
 5   6   5

但它的显示如下:

*p   b   a
 1   1   1
 2   3   2
 3   4   3
 4   5   4
 5   6   5        

即使我在每个 a[] 中都添加了 +1。但对于第一次打印,它显示 1 个输出。为什么?

【问题讨论】:

标签: c printing for-loop


【解决方案1】:

p=b;p 设置为指向b[0]。因此,虽然b[0] 增加了b[i]=a[i]+1;,但它又减少了*p=b[i]-1;

【讨论】:

  • 帮我解决它而不创建下一个数组
【解决方案2】:

这将是您程序的工作版本:

#include <stdlib.h>
#include <stdio.h>

int main(void)
{

int a[]={1,2,3,4,5};
int b[]={0,0,0,0,0};
int c[]={0,0,0,0,0}; //another array
int *p;
int i;
p=c; // point p to a new array to write to.
for( i =0 ; i<5 ; i++)
{
    b[i]=a[i]+1;
    *p=(b[i]-1);
    printf(" %i \t %i \t %i \n" ,*p,b[i],a[i]);

}
return 0;
}

【讨论】:

    【解决方案3】:

    问题是:

    int a[]={1,2,3,4,5};
    int b[]={0,0,0,0,0};
    int *p;
    int i;
    p=b; // <<---- HERE
    

    你让p指向数组b的第一个元素,然后在这段代码中:

    b[i] = a[i]+1;
    *p = b[i]-1;
    

    虽然您将值 2 分配给第一个元素,*p = b[i]-1; 再次将其重写为 1,这就是为什么您的输出的第一行是:

    1 1 1
    

    【讨论】:

    • 如何在不创建另一个数组的情况下消除此错误?
    【解决方案4】:

    关键是设置p=b。 p 和 b 都是指针,也就是说 *p 和 b[0] 都指向同一个数据。

    在循环的第一次迭代中,您首先将一个添加到 b[0],然后再减去一个。对于以下迭代,*p 仍然与 b[0] 相同,但该值取自更高的索引。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-25
      • 2016-12-22
      • 2021-08-27
      • 1970-01-01
      相关资源
      最近更新 更多