如何解决以下用于查找数字阶乘的代码在 Xcode 上进入无限循环将数字作为输入后没有显示任何输出
#include <stdio.h>
int main()
{
int n,fact = 1;
printf("Enter a number\n");
scanf("%d\n",&n);
while(n > 0)
{
fact = fact * n;
n--;
}
printf("Factorial is: %d",fact);
return 0;
}
请帮我找出这个错误。我曾尝试使用 long 和 unsigned long int 但它仍然不起作用。
解决方法
scanf("%d\n",&n);
// ^^
这将读取一个整数,然后是尽可能多的空格。它通过读取字符直到找到第一个非空白字符然后将其推回到输入流以进行下一次读取来做到这一点。来自 ISO C11 标准 7.21.6.2 The fscanf function /5
:
由空白字符组成的指令通过读取输入直到第一个非空白字符(保持未读)或直到无法读取更多字符来执行。该指令永远不会失败。
因此,在您输入整数后,您的代码仍在等待第一个非空白字符。如果您实际输入一个字符(例如 x
),然后按 ENTER,您会看到它继续。
因此,解决方案只是去掉格式字符串末尾的 \n
。
另外两个建议,与您的问题无关,但需要了解:
- 使用其中一种规范的
main
格式,此代码所需的格式是int main(void)
。 - 将
\n
放在printf
格式字符串的末尾,以便更好地格式化输出。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。