【发布时间】:2023-03-10 23:22:01
【问题描述】:
我正在尝试编写一个程序来读取用户的输入并确定整数是否为斐波那契。
程序应该打印出num is fib或num is not fib,其中num是一个正整数;
如果输入是非正数,程序不应该产生任何输出(但它应该在stderr上产生错误信息)并且应该不断提示;
如果输入包含任何字符,则程序不应产生任何输出(但应在 stderr 上产生错误消息)然后退出。
这是预期的结果:
1 2 3 4 5
1 is fib
2 is fib
3 is fib
4 is not fib
5 is fib
(不断提示输入)
1 -2 3 -4 5
1 is fib
Error: input value -2 is not positive
3 is fib
Error: input value -4 is not positive
5 is fib
(不断提示输入)
1-23-45
1 is fib
Error: input value -23 is not positive
Error: input value -45 is not positive
(不断提示输入)
12a
12 is not fib
Error: input is not a number
我能够检查第一个输入数字,但完成后,程序会自行退出。如何让scanf() 知道何时继续阅读以及何时退出?
这是我的代码
int main() {
int num, x, y, z;
while (scanf("%d", &num) > 0) {
if (num <= 0) {
fprintf(stderr, "Error: input value %d is not positive\n", num);
return -1;
} else {
x = 0;
y = 1;
z = x + y;
while (z < num) {
x = y;
y = z;
z = x + y;
}
if (z == num) {
printf("%d is fib\n", num);
} else {
printf("%d is not fib\n", num);
}
return 0;
}
}
return 0;
}
【问题讨论】:
-
您的代码(尚未)报告“不是数字”。
-
程序是否应该在文件末尾静默退出?
-
@chqrlie 是的,一旦涉及字符就退出,然后向 stderr 发送消息
-
@Crysishy:这不准确:如果有字母等违规字符,您需要一条错误消息,但如果在我们到达文件末尾时输入中没有剩余字符,为什么你应该有错误消息吗?
标签: c