我正在尝试使用以下数组编写程序:
下面的代码是我的最大努力(我第五次尝试解决该问题),但是它正在收集整数零,并将其显示在数组索引中(我尝试附加其他五个,但仍会产生错误):
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]);
}
}
答案 0 :(得分:1)
看到问题是,首先要在此处用零初始化整个数组
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]);
}
答案 1 :(得分:0)
我认为是因为您没有将任何数字插入数组的第一位(位置[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++;
}
答案 2 :(得分:0)
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;
}
答案 3 :(得分:0)
这是我的解决方案,其中包含一些良好的实践,这是您对代码的调整:
1)您希望将定义定义在函数(或main)之外,以便可以在整个程序中使用相同的常量;
2)任何具有返回类型(例如int main)的函数都必须在末尾返回某些内容,因此您必须在主函数的末尾具有“ return 0”;
3)do-while部分将确保您的代码段在检查while条件之前将被执行一次;
4)userId
将为“ numbers [numbersEntered]”分配“ number”的值,然后将“ numbersEntered”增加1;这是为了减少您必须编写的代码量:);
希望这对您有所帮助,如果您还有其他问题,希望我可以回答:)。
function DisplayUser({userId}) {
const [loggedUser, setLoggedUser] = React.useState(null);
React.useEffect(() => {
fetchData(userId).then(user => {
setLoggedUser(user);
})
}, [userId]); // only run when userId changed
return (
<div>
<div>{loggedUser}</div>
</div>
);
}