程序在颠倒顺序时跳过数组的最后一个元素

时间:2017-07-01 03:43:35

标签: c

以下程序获取输入并将其反转但它似乎在执行此操作时跳过数组的最后一个元素

/*C program that declares an array A and inputs n integer values in A.
Then the contents of array A is copied to another array B in reversed order. 
Finally print the elements of array B*/

#include<stdio.h>
int main()
{
  int n, reverse, i ;
  int A[100], B[100] ;
  printf("Input the size of array A: ") ;
  scanf("%d", &n ) ;
  printf("Input the values of  A: ") ;
  for( i = 0 ; i<n ; i++ )
      scanf("%d ", &A[i] ) ;
  for(i = n-1 , reverse = 0 ; i>= 0 ; i--, reverse++)
      B[reverse] = A[i] ;
  for(i = 0 ; i<n ; i++ )
      A[i] = B[i];
  printf("Array B: ") ;
  for(i=0 ; i<n ; i++ )
      printf("%d ", A[i] ) ;
  return 0 ;
}

以下是展示问题的代码的在线repel

2 个答案:

答案 0 :(得分:3)

问题是你如何格式化scanf

  for( i = 0 ; i<n ; i++ )
     scanf("%d ", &A[i] ) ;

%d之后的额外空格正在弄乱输入。输入数据必须与scanf字符串的格式完全匹配。要将此更改修复为

  for( i = 0 ; i<n ; i++ )
     scanf("%d", &A[i] ) ;

这是因为

  

格式字符串中的空格(例如空格,制表符或换行符)   在输入中匹配任何数量的空白,包括无空格。   其他一切只与自己匹配。

This详细解释

答案 1 :(得分:0)

这段代码工作正常,并且按照相反的顺序打印所有数据,前提是你输入数组的值,方法是在每个数据之间给出一个空格,并立即给所有值。