问题描述
#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
格式字符串的末尾,以便更好地格式化输出。