#include <stdio.h>
#include <conio.h>
void main()
{
int arr[5], new[5], i, j;
printf("ENTER ANY FIVE NUMBERS:");
scanf("%d%d%d%d%d", &arr[0], &arr[1], &arr[2], &arr[3], &arr[4]);
for(i=0; i<5; i++)
{
for(j=5; j>=0 ;--j)
{
new[i] = arr[j];
printf("%d", new[i]);
printf(" ");
}
}
getch();
}
上面的代码是一个简单的问题,它要求在数组中获取数字的输入并显示输入的逆数组。我试图自己解决它,并编写了上面的代码。但是编译器会多次显示结果,我的意思是,结果应该只有5个数字,但输出显示一系列数字。
答案 0 :(得分:1)
这是一个问题:
for(j=5;j>=0;--j){
new[i]=arr[j];
^ out of bounds access to arr[5]
将其更改为
for(j=4;j>=0;--j){ // 4 instead of 5
new[i]=arr[j];
也就是说,如果您只想以相反的顺序打印数组,只需执行:
for(j=4;j>=0;--j){
printf("%d", arr[j]);
printf(" ");
}
printf("\n");
不需要两个循环,也不需要额外的数组new
如果您真的想要“反向副本”,请执行以下操作:
for(j=4;j>=0;--j){
new[4-j] = arr[j];
printf("%d", arr[j]); // or printf("%d", new[4-j]);
printf(" ");
}
printf("\n");