无法打印以相反顺序输入数组的数字
Unable to print numbers entered into an array in reverse order
我正在尝试编写一个包含数组的程序,其中:
- 用户输入10个整数,然后整数倒序显示,或者
- 用户最多输入 10 个整数并使用 0 退出 while 循环,然后输入的整数以相反的顺序显示。
下面的代码是我最大的努力(我第 5 次尝试解决问题),但它收集整数零并将其显示在数组索引中(我试图附加其他五个,但它一直在产生错误):
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,所以第一个数字输入数组 numbers 为 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]);
}
我认为这是因为您没有将任何数字插入到数组的第一个位置 (place[0]),因为您过早地提示了 numbersEntered
的值。尝试以这种方式编写循环:
while (number != 0 && numbersEntered < ARRAY_LENGTH - 1){
numbers[numbersEntered] = number;
printf("Enter another integer; 0 to quit: ", ARRAY_LENGTH - 1);
scanf_s("%d", &number);
numbersEntered++;
}
- 行
printf("Enter an integer; 0 to quit: ", ARRAY_LENGTH - 1);
应该是
printf("Enter an integer; 0 to quit: ");
- 你应该使用
scanf
而不是 scanf_s
以下 code
可以工作:
#include <stdio.h>
#define ARRAY_LENGTH 10
int main()
{
int numbers[ARRAY_LENGTH];
int i;
int k;
for (k = 0; k != ARRAY_LENGTH; ++k)
{
printf("Enter an integer; 0 to quit: ");
if (scanf("%d", numbers + k) != 1 || numbers[k] == 0)
break;
}
for (i = k - 1; i >= 0; --i)
printf("index %d -> %d\n", i, numbers[i]);
return 0;
}
这是我的一个解决方案,其中包含一些好的做法,这是对您的代码的调整:
1) 您可能希望在函数(或 main)之外定义,这样您就可以在整个程序中使用相同的常量;
2) 任何具有 return 类型的函数(例如 int main)必须在末尾 return 某些东西,因此您必须在 main 末尾有一个 "return 0"函数;
3) do-while 部分将确保您的代码在检查 while 条件之前执行一次;
4) numbers[numbersEntered++] = number;
会将 "number" 的值赋给 "numbers[numbersEntered]",然后将 "numbersEntered" 加一;这是为了减少您必须编写的代码量:);
希望对您有所帮助,如果您有更多问题,希望我能回答:)。
#define ARRAY_LENGTH 10
int main()
{
int numbers[ARRAY_LENGTH];
int numbersEntered = 0;
for (int i = 0; i < ARRAY_LENGTH; i++)
numbers[i] = 0;
int number = 0;
do
{
printf("Enter an integer; 0 to quit: ");
scanf_s("%d", &number);
if (number == 0)
break;
numbers[numbersEntered++] = number;
} while (number != 0 && numbersEntered < ARRAY_LENGTH);
if (numbersEntered > 0)
{
for (int i = numbersEntered - 1; i >= 0; i--)
printf("index %d -> %d\n", i, numbers[i]);
}
return 0;
}
我正在尝试编写一个包含数组的程序,其中:
- 用户输入10个整数,然后整数倒序显示,或者
- 用户最多输入 10 个整数并使用 0 退出 while 循环,然后输入的整数以相反的顺序显示。
下面的代码是我最大的努力(我第 5 次尝试解决问题),但它收集整数零并将其显示在数组索引中(我试图附加其他五个,但它一直在产生错误):
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,所以第一个数字输入数组 numbers 为 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]);
}
我认为这是因为您没有将任何数字插入到数组的第一个位置 (place[0]),因为您过早地提示了 numbersEntered
的值。尝试以这种方式编写循环:
while (number != 0 && numbersEntered < ARRAY_LENGTH - 1){
numbers[numbersEntered] = number;
printf("Enter another integer; 0 to quit: ", ARRAY_LENGTH - 1);
scanf_s("%d", &number);
numbersEntered++;
}
- 行
printf("Enter an integer; 0 to quit: ", ARRAY_LENGTH - 1);
应该是printf("Enter an integer; 0 to quit: ");
- 你应该使用
scanf
而不是scanf_s
以下 code
可以工作:
#include <stdio.h>
#define ARRAY_LENGTH 10
int main()
{
int numbers[ARRAY_LENGTH];
int i;
int k;
for (k = 0; k != ARRAY_LENGTH; ++k)
{
printf("Enter an integer; 0 to quit: ");
if (scanf("%d", numbers + k) != 1 || numbers[k] == 0)
break;
}
for (i = k - 1; i >= 0; --i)
printf("index %d -> %d\n", i, numbers[i]);
return 0;
}
这是我的一个解决方案,其中包含一些好的做法,这是对您的代码的调整:
1) 您可能希望在函数(或 main)之外定义,这样您就可以在整个程序中使用相同的常量;
2) 任何具有 return 类型的函数(例如 int main)必须在末尾 return 某些东西,因此您必须在 main 末尾有一个 "return 0"函数;
3) do-while 部分将确保您的代码在检查 while 条件之前执行一次;
4) numbers[numbersEntered++] = number;
会将 "number" 的值赋给 "numbers[numbersEntered]",然后将 "numbersEntered" 加一;这是为了减少您必须编写的代码量:);
希望对您有所帮助,如果您有更多问题,希望我能回答:)。
#define ARRAY_LENGTH 10
int main()
{
int numbers[ARRAY_LENGTH];
int numbersEntered = 0;
for (int i = 0; i < ARRAY_LENGTH; i++)
numbers[i] = 0;
int number = 0;
do
{
printf("Enter an integer; 0 to quit: ");
scanf_s("%d", &number);
if (number == 0)
break;
numbers[numbersEntered++] = number;
} while (number != 0 && numbersEntered < ARRAY_LENGTH);
if (numbersEntered > 0)
{
for (int i = numbersEntered - 1; i >= 0; i--)
printf("index %d -> %d\n", i, numbers[i]);
}
return 0;
}