1

通貨を交換してビールを購入できる簡単なプログラムを作成しました。

しかし、プログラムに何かがあり、その理由がわかりません.3番目の入力データを自動的にスキップします->プログラムを終了します。

ここに私のコード:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int ex_rate_into_vnd = 20000; //! Exchange Rate
    int beer = 7000; //! Local price of a beer
    float in_c = 0; //! Input amount of money
    float out_c = 2; //! Amount of currency to exchange !
    float choice; //! Switch mode
    char buy; //! Deal or not

    //! Introduction
    printf ("||---------------------------------------------------||\n");
    printf ("||         Currency Exchange Machine  beta           ||\n");
    printf ("||---------------------------------------------------||\n");

    printf ("Please choose your option:\n");
    printf("\t 1.Exchange VND to dollar\n");
    printf("\t 2.Exchange Dollar to VND\n");

    do
    {
        printf("Your choice: ",choice);
        scanf("%f",&choice);
    } while( choice != 1 && choice != 2);

    printf ("Please enter amount of money:");
    scanf("%f",&in_c);

    if (choice == 1 )
        {
            out_c = in_c / ex_rate_into_vnd;
            printf ("Your amount of money: %.2f",out_c);
        }
    else
        {
           out_c = in_c * ex_rate_into_vnd;
           printf ("Your amount of money: %.0f",out_c);
        }
//! End of Exchanging

    printf ("\nWould you like to buy a beer (y/n) ?",buy);
    scanf("%c", &buy);

    if (buy == 'y')
        {
        if (out_c >= 7000)
            {
                out_c = out_c - 7000;
                printf("Transactions success !\n");
                printf("Your amount: %2.f",out_c);
            }
        }
    printf ("\nWhy Stop ?");


    return 0;
}
4

7 に答える 7

2

それ以外のscanf("%c", &buy);

1.%c の前にスペースを使用

scanf(" %c",&buy); //space before %c  
       ^ 

これにより、空白 (改行を含む) の読み取りがスキップされます。

2.または getchar(); を使用します。scanf("%c", &buy); の前に 声明

getchar(); //this hold the newline 
scanf("%c", &buy);

3. または getchar(); を 2 回使用します。

getchar();
buy=getchar();     
//here getchar returns int , it would be better if you declare buy with integer type.

GCC では、の使用fflush(stdin);はお勧めできません。使用は避けてください。

于 2013-09-10T14:34:59.890 に答える
2

\n最新の float エントリとchar読みたいの間に少なくとも 1つある。まずそれを取り除く必要があります。

後のカテゴリのすべての回答も参照してくださいgetcharscanf

于 2013-09-10T14:20:08.657 に答える
2

変化する

scanf("%c", &buy);

scanf(" %c", &buy);
//     ^space

数値を入力して 2 番目に ENTER を押した後、改行文字がまだ入力バッファーにあるためですscanf

于 2013-09-10T14:20:16.357 に答える
0

プログラムは 3 番目の入力データをスキップしません。2 番目の入力の後に押した改行をスキャンするだけです。これを修正するには、scanf("%*c%c", &buy);代わりにscanf("%c", &buy);. これ%*cは、入力から読み取った文字をスキャンして無視します。

于 2013-09-10T14:28:03.590 に答える