[英]My C do while loop will not execute
我的程序分配是編寫一個循環程序,該程序將USD轉換為Euros。 我的代碼看起來像這樣
#include <stdio.h>
int main(void)
{
double USD, euro;
char again;
do
{
printf("Please enter the amount of USD you want to convert to Euros> ");
scanf_s("%lf", &USD);
euro=USD * 0.73209;
printf("%4.2f USD equals %4.2f Euros.", USD, euro);
printf("Do you want to convert another amount (y/n)?");
scanf_s("%c", &again);
}
while (again == 'y' || again == 'Y');
return 0;
}
當我運行該程序時,它將執行,允許我輸入美元值,為我提供正確的歐元值,然后在提示輸入y / n時退出。
正如其他人所解釋的那樣,您的問題是由於\\n
保留在STDIN中。
為了跳過它,只需替換
scanf_s("%c", &again);
同
scanf_s(" %c", &again);
這是scanf
功能的一部分:
空格字符:空白(''); 標簽('\\ t'); 或換行符('\\ n')。 空格字符會使scanf讀取但不存儲輸入中的所有連續的空格字符,直到下一個非空格字符。 格式中的一個空格字符與輸入中的任何數字(包括0)和空格字符組合匹配。
對於您的第一次scanf
,
scanf(" %lf", &USD);
可能也有幫助。
這是因為在輸入流(stdin)中剩余了雜散\\ r和/ n,它們由scanf讀取並且無法執行,請用以下命令替換scanf_s行:
while((again = getchar()) != '\n' && again != EOF);
如果您想使用scanf_s,則可以執行以下操作
do {scanf_s("%c", &again);}while(again == '\n' || again == '\r');
有關此信息的更多信息,請訪問http://c-faq.com/stdio/gets_flush2.html
我認為您必須在這里使用strcmp()。
while ( strcmp(again, 'y') == 0 || strcmp(again, 'Y') == 0 )
我要學習C大約有兩個星期,所以對不起,如果抱歉!
嘗試這個。
#include <stdio.h>
int main(void)
{
double USD, euro;
char again;
do
{
printf("Please enter the amount of USD you want to convert to Euros> ");
scanf_s("%lf", &USD);
getchar();
euro=USD * 0.73209;
printf("%4.2f USD equals %4.2f Euros.", USD, euro);
printf("Do you want to convert another amount (y/n)?");
again = getchar();
}
while (again == 'y' || again == 'Y');
return 0;
}
這是因為scanf不需要空格字符。 例如換行符,空格等。當您按Enter鍵時,“ USD”取值,而“再次”取換行符。 希望這可以幫助。 :)
stdin
(標准輸入)在您要求美元金額后,又缺少一個字符,該字符並非簡單易行,事實上,它正在等待您將其取出,這就是您要做的最后一個scanf
。 發生這種情況是因為您告訴scanf
(第一個)僅讀取一個float
(雙float
)而沒有其他內容。
要查看發生了什么,您可以按照indiv所述again
檢查變量的值。 盡管最好打印ASCII值而不是字符本身,因為您可能無法真正確定它是空格,換行,制表符還是任何其他此類字符。
而是嘗試這樣:
printf("ASCII: %d, CHAR: %c\n", again, again);
將該行放在最后一個scanf
。
無論哪種方式,您的問題都是找到一種丟棄最后一個字符的方法。 一種解決方案是從stdin
讀取一個字符串,然后使用atof()
將字符串轉換為十進制數。
更改
scanf_s("%c", &again);
至
scanf_s("%c", &again, 1);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.