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