[英]The following code for finding the factorial of a number goes into an infinite loop on Xcode.There is no output shown after taking the number as input
#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);
// ^^
這將讀取 integer,然后讀取盡可能多的空白。 它通過讀取字符直到找到第一個非空白字符然后將其推回輸入 stream 以進行下一次讀取。 來自 ISO C11 標准7.21.6.2 The fscanf function /5
:
由空白字符組成的指令通過讀取輸入直到第一個非空白字符(仍然未讀取)或直到無法讀取更多字符來執行。 該指令永遠不會失敗。
因此,在您輸入 integer 后,您的代碼仍在等待第一個非空白字符。 如果您實際上輸入了一個字符(例如x
),然后是ENTER ,您會看到它繼續。
因此,解決方案就是去掉格式字符串末尾的\n
。
另外兩個與您的問題無關但有用的建議:
main
格式之一,此代碼所需的格式是int main(void)
。printf
格式字符串的末尾放置一個\n
,以便更好地格式化 output 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.