簡體   English   中英

以下用於查找數字的階乘的代碼在 Xcode 上進入無限循環。將數字作為輸入后沒有顯示 output

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM