代码: - 通过交换来反转数组的元素
编译器: - 代码块13.12
每当我尝试编译并运行此代码时,会出现一个未知值而不是反转数组,在调试后我意识到代码工作正常,直到交换部分,真正的问题在此之后开始,而不是打印c的值而不是分配为零会自动分配到程序开头的n中的值;
所以它打印出我没有分配的arr [n]的值,因为它是垃圾值
我已经在网上编译了同样的问题。请帮帮我,我非常好奇,弄清楚我的错。
#include<stdio.h>
int main()
{
int n,c,t,end,arr[100];
//entering the number of elements
printf("enter the number of elements of array\n");
scanf("%d",&n);
end=n-1;
//printing the array
printf("enter your array\n");
for (c=0;c<n;c++)
scanf("%d",&arr[c]);
//swapping the array's value
for (c=0;c<n/2;c++)
{
t=arr[c];
arr[c]=arr[end];
arr[end]=t;
end--;
}
//printing the new array
printf("reversed array is\n");
for (c= 0;c<n;c++);
/*at this point the value of c becomes equal to the n (i.e, the number of
elements of the array)*/
printf("%d\n",arr[c]);
return 0;
}
答案 0 :(得分:1)
最后一个for循环已经结束了; 删除它们
答案 1 :(得分:0)
您是否正在尝试反转数组,更改for语句循环结束&#39;;&#39;在打印中删除半冒号。
printf("reversed array is\n");
for (c= 0;c<n;c++)
/*at this point the value of c becomes equal to the n (i.e, the number of
elements of the array)*/
printf("%d\n",arr[c]);
答案 2 :(得分:0)
替换
for (c= 0;c<n;c++);
通过
for (c= 0;c<n;c++)
Acually your code
for (c= 0;c<n;c++);
printf("%d\n",arr[c]);
相当于
for (c= 0;c<n;c++)
{
}
printf("%d\n",arr[c]);
答案 3 :(得分:0)
错误在于:
printf("reversed array is\n");
for (c= 0;c<n;c++); <---------------- ERROR
printf("%d\n",arr[c]);
你看,这个分号使 for循环的主体为空。
所以代码等同于:
printf("reversed array is\n");
for (c= 0;c<n;c++)
; // empty body
printf("%d\n",arr[c]); // c equals n
因此,当您尝试打印数组时,c
的值等于n
,因此您将超出界限,从而导致 未定义的行为 强>
答案 4 :(得分:0)
您的索引计数器c保存数组的最后一个元素,它始终为'\ 0'。数组基本上是指向第一个元素的指针,结尾由'\ 0'表示结尾处的终止字符。当你做for(c = 0; c < n; c++);
时c将递增并变为等于'n'。我想我明白为什么你认为这应该重新调整c = n-1,因为你使用了c&lt; n不是c&lt; = n然而,在确定是否执行即将到来的闭包之前,整个条件也将被执行c ++(在这种情况下,由于for循环没有闭包,因此无关紧要)。所以整个事情最终给出了c = n。
我希望这清楚但是作为建议,尝试在操作员之间留出空间并在学习编程时练习最佳缩进,因为一旦习惯了它可能很难养成习惯。
答案 5 :(得分:-1)
我认为你的错误就是:
for (c= 0;c<n;c++);
n
是元素的数量(p.e.5元素),但您的最后一个元素位于arr[n-1]
。
尝试使用for (c= 0;c<(n-1);c++);
或printf("%d\n",arr[c-1]);