我正在尝试使用以下数组编写程序:


用户输入10个整数,然后以相反的顺序显示整数,或者
用户最多输入10个整数,并使用0退出while循环,然后以相反的顺序显示输入的整数。


下面的代码是我的最大努力(这是我第五次尝试解决该问题),但是它正在收集整数零并将其显示在数组索引中(我尝试附加其他五个,但始终会产生错误):

c - 无法以相反的顺序打印输入到数组中的数字-LMLPHP

int main()
{
   #define ARRAY_LENGTH 10

   int numbers[ARRAY_LENGTH];
   int numbersEntered = 0;

   for (int i = 0; i < ARRAY_LENGTH; i++)
   {
       numbers[i] = 0;
   }

   int number = 0;
   printf("Enter an integer; 0 to quit: ", ARRAY_LENGTH - 1);
   scanf_s("%d", &number);

   while (number != 0 && numbersEntered < ARRAY_LENGTH - 1)
   {
       numbersEntered++;
       numbers[numbersEntered] = number;
       printf("Enter another integer; 0 to quit: ", ARRAY_LENGTH - 1);
       scanf_s("%d", &number);
   }

   for (int i = numbersEntered; i >= 0; i--)
   {
       printf("index %d -> %d\n", i, numbers[i]);
   }
}

最佳答案

看到问题是先在这里用零初始化整个数组

for (int i = 0; i < ARRAY_LENGTH; i++)
   {
   numbers[i] = 0;
   }


那你就是这样做

while (number != 0 && numbersEntered < ARRAY_LENGTH - 1)
   {
   numbersEntered++;
   numbers[numbersEntered] = number;
   printf("Enter another integer; 0 to quit: ", ARRAY_LENGTH - 1);
   scanf_s("%d", &number);
   }


所以发生了什么,因为numbersEntered已经用零初始化,所以您将其递增1,因此在开始初始化整个数组本身时,在数组中输入的第一个数字为0。

因此,快速解决方案是将其向下移动一行并将while循环代码更改为此

while (number != 0 && numbersEntered < ARRAY_LENGTH - 1)
   {
   numbers[numbersEntered] = number;
   numbersEntered++;
   printf("Enter another integer; 0 to quit: ", ARRAY_LENGTH - 1);
   scanf_s("%d", &number);
   }


另外,正如Kiran在评论中指出的那样,需要将循环打印更改为

for (int i = numbersEntered-1; i > 0; i--)
   {
   printf("index %d -> %d\n", i, numbers[i]);
   }

10-07 16:20
查看更多