当第一个数字为1
且第二个数字为2
且长度为5
时,它应为1 2 3 5 8
。但是我的输出总是1 2 1 3 4
。我似乎无法找到问题。
另一项输入是2
和5
。输出为2 5 1 6 7
。第3个数字是1不应该在那里。我应该更改或添加什么?
*这已经是提交的硬件,是的,我错了,我已经得到了扣除。现在我只想解决这个问题,以便我可以研究这个。
int main()
{
int i, lenght = 0, fib, sum, sum1, sum2, a, b, c;
printf("\nFirst number: ");
scanf("%d", &a);
printf("\nSecond number: ");
scanf("%d", &b);
printf("\nHow long?: ");
scanf("%d", &lenght);
{
while ((a > b) || ((lenght < 2) || (lenght > 100)))
{
printf("\nFirst number: ");
scanf("%d", &a);
printf("\nSecond number: ");
scanf("%d", &b);
printf("\nHow long?: ");
scanf("%d", &lenght);
}
}
printf("%d\t%d\t", a, b);
printf("%d\t", fib);
for (i = 3; i < lenght; i++) {
if (i <= 1) fib = i;
else {
a = b;
b = fib;
fib = a + b;
}
printf("%d\t", fib);
}
}
答案 0 :(得分:2)
第一次打印fib
时(在for
循环之前),您尚未分配任何内容。
答案 1 :(得分:0)
在打印fib=a+b;
值之前添加fib
。
它是一个很好的编码习惯,可以在使用之前初始化所有变量(特别是在C中)。
答案 2 :(得分:0)
你的代码对我来说很奇怪。我试着简化你的代码。看一次:
sub.Popen(['cd', './10dir')
希望它有用!!
答案 3 :(得分:0)
由于这是用于研究,您的代码存在问题:您不需要复制对scanf()
的调用,只需将其中一个变量初始化为失败(您执行了此操作:lenght = 0
)和让循环做它的事情;选择一个缩进样式并坚持下去;如果你是C的新手,总是要包括花括号,即使语言说它们是可选的;你(正确)允许长度为2,但然后打印三个数字;您的if (i <= 1)
子句是无操作,因为循环以for (i = 3;
开头,因此i
永远不会少于3。
总而言之,我们得到的结论是:
#include <stdio.h>
int main() {
int length = 0, a, b;
while (length < 2 || length > 100 || a > b ) {
printf("\nFirst number: ");
(void) scanf("%d", &a);
printf("\nSecond number: ");
(void) scanf("%d", &b);
printf("\nHow long?: ");
(void) scanf("%d", &length);
}
printf("%d\t%d\t", a, b);
for (int i = 2; i < length; i++) {
int fib = a + b;
printf("%d\t", fib);
a = b;
b = fib;
}
printf("\n");
return 0;
}
请注意,输入错误检查不足以防止出现问题。例如。 b
可能大于a
,但如果输入随机数,仍然会使序列混乱。你假设用户知道从斐波那契序列中输入两个相邻的项目,这些项目很难测试。