I have written a simple program to exchange currency and able to buy a beer.
But there something in program and I don't know why, it auto skips the third input data -> end program.
Here my code :
#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;
}
I was wondering why you made 'choice' a float, not an int Also, consider using a switch-case that way, you won't have to do the whole do-while loop. Also, in the line printf ("\nWould you like to buy a beer (y/n) ?",buy); Why did u add that? Here is what I would have done :
}
EDIT: also, where it says
if( <somevariable> >= 7000)
, change 7000 to beer, so that way, if u change beer, you won't have to change this :)Instead of
scanf("%c", &buy);
1.use space before %c
this skips reading of white space (including newlines).
2.or Use getchar(); before scanf("%c", &buy); statement
3.or use two times getchar();
In GCC usage of
fflush(stdin);
is discouaraged. please avoid using it.Put a fflush(stdin) to clear the input before the last scanf
Change
to
Because the newline character is still in the input buffer after you enter a number and press ENTER in the second
scanf
.you can remove the
buy
variable from the printf call, it's unneededAnd replace
char buy
bychar buy[2];
. because a sting is always terminated by/0
.You can also add a
memset (buy, 0, sizeof(buy))
, to be sure that memory is reset before you start to use it.You have at least one
\n
between the latest float entry and thechar
you want to read. You need to get rid of that first.See also all answers in
getchar
afterscanf
category