我的代碼輸入是這樣的:ANSI C停機過程中,如果用戶點擊,而無需輸入數據
double p, r = 12.40;
while (r > 0) {
printf("\nEnter a amount $: ");
scanf("%lf", &p);
if(p == NULL) { break; }
r -= (p/100);
}
的break
部分不工作。如果用戶點擊輸入而不輸入任何金額,我想退出while
循環。
我的代碼輸入是這樣的:ANSI C停機過程中,如果用戶點擊,而無需輸入數據
double p, r = 12.40;
while (r > 0) {
printf("\nEnter a amount $: ");
scanf("%lf", &p);
if(p == NULL) { break; }
r -= (p/100);
}
的break
部分不工作。如果用戶點擊輸入而不輸入任何金額,我想退出while
循環。
如果您希望循環當用戶按下輸入退出值,scanf()
可能不是你的循環返回控制,直到用戶輸入一個值(這被稱爲阻塞) 。
您可以先使用fgets()
,然後將輸入傳遞給scanf()
的親戚sscanf()
以獲得%lf雙精度值。
正如@EdHeal指出的,scanf()有一個你需要檢查的返回值。它將返回成功轉換的事情數量或特殊值EOF,這意味着沒有更多的數據需要讀取。從sscanf()
這個返回值將讓您知道用戶是否輸入了值。
所以,把他們放在一起:
int main()
{
double p, r = 1240;
char line[120];
while (r > 0) {
printf("\nEnter a amount $: ");
fgets(line, 120, stdin);
int scanned = sscanf(line, "%lf", &p);
if(scanned==0 || scanned==EOF) break;
r -= (p *100);
}
return 0;
}
更多有關fgets()
以及每個參數是檢查其man page。
當用戶按此處輸入時,p
變量不一定變爲NULL
。你應該嘗試得到一個特定的數字或字符退出循環。除了scanf
函數等待用戶輸入內容之外,當您按Enter鍵而不輸入任何值時,程序不會繼續。
p
不是指針,而是NULL
等於零(通常)。所以這條線有點無意義 if(p == NULL) { break; }
scanf
的手冊頁 - 即http://linux.die.net/man/3/scanf。它返回你需要檢查
無論我是否輸入數字,該解決方案都可以工作。如果我輸入一個數字並按回車鍵,將運行'r - =(p * 100);'然後退出循環。我不想那樣。這不是循環的條件。 r> 0 – Oscar
因爲p乘以100,所以任何大於12的值都會退出,因爲r是1240開始。我剛剛從原來的帖子中找到了該行。 –
對不起。我的錯。它應該是'r = 12.40;'和'r - =(p/100)'(我剛剛修復了這篇文章中的主代碼) – Oscar