簡體   English   中英

我的C do while循環不會執行

[英]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)和空格字符組合匹配。

http://msdn.microsoft.com/en-us/library/kwwtf9ch.aspx

對於您的第一次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.

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