簡體   English   中英

scanf 后輸入數字重置為 0

[英]Input number resets to 0 after scanf

我有一個奇怪的問題。 我要求用戶輸入 1 到 15 之間的數字。然后我會詢問用戶是否願意使用遞歸或 for 循環獲取數字的階乘值。 當他們回答該問題時,輸入的值變為 0。如果我出於測試目的刪除問題,該值將保持用戶輸入的值。

#include <stdio.h>
    int recursive(int);
    int nonRecursive(int);
    
    int main() 
    {
      /* Variables */
      int numberSelected, returnedValue;
      char answer;
      
      do
      {
        /* Request a number between 1 and 15 */
        printf("Please enter a number between 1 and 15: ");
        scanf("%d", &numberSelected);
        printf("%d\n", numberSelected); /* This prints out the user's number */
      }while(numberSelected < 1 || numberSelected > 15); /* Loops if the value is not between 1 and 15 */
      
      /* Ask user if they want to return a recursive value or a value calculated manually */
      printf("Would you like a recusive value of the number you entered? Y or N: ");
      scanf("%s", &answer);
      if(answer == 'y' || answer == 'Y')
      {
        printf("%d\n", numberSelected); /* Here it resets to 0 */
        returnedValue = recursive(numberSelected); /* Returns the recursive value */
        printf("The recursive value of %d is %d\n", numberSelected, returnedValue);
      }
      else
      {
        printf("%d\n", numberSelected); /* Here it resets to 0 also*/
        returnedValue = nonRecursive(numberSelected); /* Returns the value from for loop */
        printf("The non recursive value of %d is %d\n", numberSelected, returnedValue);
      }
     
      
      return 0;
    }
    /* Get value using recursive */
    int recursive(int n)
    {
     if (n == 0)
     return 1; // Base case
     else
     return n * recursive(n - 1);
    }
    
    /* Get value using for loop */
    int nonRecursive(int n)
    {
      int i;
      int fact = 1;
      for(i = 1; i <= n; i++)
      {
         fact *= i;
      }
     
      return fact;
    }

感謝您的幫助

scanf("%s", &answer);

是錯的。 %s用於讀取字符串(null-terminated 字符序列),但answer只有 1 個字符的空間,因此讀取具有一個或多個字符的字符串時會發生越界寫入。 它可能會破壞相關數據。

該行應該是

scanf(" %c", &answer);
  • 使用%c ,它讀取單個字符。
  • %c之前添加一個空格讓scanf()忽略空白字符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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