我需要找到一個由用戶以有效方式在1到1000之間確定的數字。它看起來像在工作,但我有一個問題。每當while循環迭代時,它會自我迭代兩次,我無法逃避這種情況。所以我不能稱之爲「完全」工作。我的代碼是:while循環在每次迭代中工作兩次
#include <stdio.h>
int main()
{
int num = 500, div = 250;
char user;
printf("Please determine a number between 1 and 1000 and then press enter. \n");
scanf("%c", &user);
while ((user != 'Y') && (user != 'y'))
{
printf("Is your number %d? Please enter 'Y' if it is, 'S' if it is smaller and 'L' if it is larger. \n", num);
scanf("%c", &user);
if ((user == 'S') || (user == 's')) {
num -= div;
if (div != 1)
div /= 2;
}
if ((user == 'L') || (user == 'l')) {
num += div;
if (div != 1)
div /= 2;
}
}
printf("The number you determined is %d!", num);
return 0;
}
我該如何解決這個問題?
編輯:我無法將CodeBlocks的輸出示例添加到Ubuntu中。輸出如下:
請確定一個數字,然後按回車。
你的號碼是500嗎?如果是,請輸入「Y」;如果它較小,請輸入「S」 ;如果較大,請輸入「L」。 s
你的號碼是250嗎?如果是,請輸入「Y」;如果它較小,請輸入「S」 ;如果較大,請輸入「L」。
你的號碼是250嗎?如果是,請輸入「Y」;如果它較小,請輸入「S」 ;如果較大,請輸入「L」。 s
你的號碼是125嗎?如果是,請輸入「Y」;如果它較小,請輸入「S」 ;如果較大,請輸入「L」。
你的號碼是125嗎?如果是,請輸入「Y」;如果它較小,請輸入「S」 ;如果較大,請輸入「L」。 l
你的號碼是187嗎?如果是,請輸入「Y」;如果它較小,請輸入「S」 ;如果較大,請輸入「L」。
你的號碼是187嗎?如果是,請輸入「Y」;如果它較小,請輸入「S」 ;如果較大,請輸入「L」。 y
您確定的數字是187!
user3121023已經解決了這個問題。我認爲既然這是一個評論,我不能解決這個問題。
感謝您的回覆,我實際上讀到enter也被接受爲char,並且因爲它不是「y」,它會在while循環中獲取正確的值,以便程序正常工作。我添加了來自gedit的輸出,那還有什麼呢? – morpheus
當我使用它時,它只是重複scanf,直到我輸入一個字符而不是輸入,並且當我輸入一個字符並輸入時,它仍然會工作兩次。它看起來更像是while循環有問題,因爲首先printf和scanf工作正確。 – morpheus
哦,我的壞...抱歉,我的腦袋因爲有點模糊。它現在可以正常工作。謝謝你的幫助! – morpheus