我正在尝试使用以下数组编写程序:
用户输入10个整数,然后以相反的顺序显示整数,或者
用户最多输入10个整数,并使用0退出while循环,然后以相反的顺序显示输入的整数。
下面的代码是我的最大努力(这是我第五次尝试解决该问题),但是它正在收集整数零并将其显示在数组索引中(我尝试附加其他五个,但始终会产生错误):
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]);
}