即使在调试程序时,也无法弄清楚为什么整数值会发生变化?

时间:2015-11-12 20:38:27

标签: c arrays

代码: - 通过交换来反转数组的元素

编译器: - 代码块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;
}

6 个答案:

答案 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]);