This problem is a typical homework question. The code presented here may contain some elements that may be a little "ahead of the game" in coursework, but it presents some of the basic elements that might be used in such an exercise.

``````#include <stdio.h>
#include <string.h>

const char Description[] =
"Currency Conversion As of June 11, 2003 2:35am GMT";

void convert(double amount, const char *from, const char *to)
{
static const struct
{
const char *name;
double rate;
} Xchg[] = /* US Dollar conversion factor */
{
{ "USD",      1.0         },
{ "Lire",     0.000603049 },
{ "Yen",      0.008464602 },
{ "Pound",    1.65123     },
{ "Peso",     0.0940910   },
};
size_t i,j;
/*
* Search for the name of the currency you want to convert from.
*/
for ( i = 0; i < sizeof Xchg / sizeof *Xchg; ++i )
{
if ( strcmp(Xchg[i].name, from) == 0 )
{
/*
* Found the 'from' currency name; 'i' is the index of it.
* Search for the name of the currency you want to convert to.
*/
for ( j = 0; j < sizeof Xchg / sizeof *Xchg; ++j )
{
if ( strcmp(Xchg[j].name, to) == 0 )
{
/*
* Found the 'to' currency name; 'j' is the index of it.
* Calculate the new value: multiply by the 'from' rate and
*                          divide by the 'to' rate.
*/
double value = amount * Xchg[i].rate / Xchg[j].rate;
printf("%g %s = %g %s\n", amount, from, value, to);
return;
}
}
return;
}
}
}

int main(void)
{
puts(Description);
convert( 20.0, "USD",  "Pound");
convert(100.0, "Yen",  "Lire" );
convert( 20.0, "Euro", "Krone");
convert( 20.0, "USD",  "Krone");
return 0;
}

/* my output
Currency Conversion As of June 11, 2003 2:35am GMT
20 USD = 12.1122 Pound
100 Yen = 1403.63 Lire
Cannot convert from "Euro"
Cannot convert to "Krone"
*/``````

David, you know how to explane things good!

Hello,

I am new to this forum but noticed you all seem very helpful. I am learning C-programming and been given a task to complete a currency conversion program. I have about exhasuted all my level of knowledge and have used up the books I have as well.

If someone here could please review this program and perhaps let me know what I have done wrong here that would be great.

The issue is that the program is to allow for a user to select a currency value from the displayed list, which as far as I can tell it will.

Than the user is to input a value to be converted, it is here that I have missed something as everytime I now enter a value I get back my error message which was coded, at least was my plan to check for only numeric values.

Again any help would be great!!!

``````/*The conversion rates of five currencies equivalent to one US dollar*/
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
int choice;
int currency;
float USD, UK, HK, EUR, NZ, AUS;
char buffer[30];

/********************************************
******Current Currency Exchange Rates*******
*
* British Pound(UK) 0.5408  6/15 8:50pm
* Hong Kong Dollar (HK) 7.7617  6/15 8:50pm
* Euro (EUR) 0.7914  6/15 8:50pm
* New Zealand (NZ) Dollar 1.6079  6/15 8:50pm
* Australian Dollar (AUS) 1.3556 6/15 8:50pm
* United States Dollar (US)
*
**********************************************/

USD = 1.00;
UK = 0.5408;
HK = 7.7617;
EUR = 0.7914;
NZ = 1.6079;
AUS = 1.3556;

do  // main loop runs until choice 0 is entered
{
/*Version and title of program and menu selection*/

printf("\n\n        Welcome to Currency Conversion Utility v. 4.2.0 \n\n\n");

printf("Please select the currency type you would like to convert into US dollars.\n\n");

printf("1. for British Pounds \n");
printf("2. for Hong Kong Dollars \n");
printf("3. for Euros \n");
printf("4. for New Zealand Dollars \n");
printf("5. for Australian Dollars \n\n");

choice = 6;  /* must be initialized to an invalid value*/
/* it's not initialized the first time, it might be in the range of 1..5*/
do     /* 1st input loop for the choice*/
{
printf("\n\nEnter the number of your choice: Than hit Enter \n\n\n");
/*reads the characters from the file associated with fp into the string pointed to.*/
fgets(buffer, sizeof(buffer),  stdin);
/* Error Checking for Numeric Values only*/
if ( ( sscanf(buffer, "%u", &choice) == 0) || choice > 5 || choice < 0 )

{
printf("\n\n\a                  Error please select agian  \n");
}
}
while(choice < 0 || choice > 5);

if ( choice > 0 )
{  /* no need to ask for the amount if exit was selected*/

currency = 100000;  // see above

do    /* 2nd input loop for the amount*/
{

printf("\n\n\nEnter the amount you want to convert to U.S. Dollars: Than hit Enter \n\n");

fgets(buffer, sizeof(buffer),  stdin);

/* Error Checking for Numeric Values only*/
if ( ( sscanf(buffer, "%d", &currency) == 0) || currency > 99999 || currency < 1 )
{
printf("\n\n\a       This is an Errneous amount based on your input\n");
printf("       please enter a numeric value");
}
}
while(currency > 99999 || currency < 1);  /* changed the condition to int values*/
}

switch(choice)
{

case 1:
printf("\n\n         You will have %.2f US dollars \n\n", USD/UK*currency);
break;
case 2:
printf("\n\n         You will have %.2f US dollars \n\n", USD/HK*currency);
break;
case 3:
printf("\n\n         You will have %.2f US dollars\n\n", USD/EUR*currency);
break;
case 4:
printf("\n\n         You will have %.2f US dollars \n\n", USD/NZ*currency);
break;
case 5:
printf("\n\n         You will have %.2f US dollars \n\n", USD/AUS*currency);
break;
case 0:
break;
return 0;
}

}

while(choice!=0 && currency != 0); /* saves the second switch.*/
/* the switch would not work if I had changed currency to float*/
puts("bye.");
puts("press enter.");
getchar();

return 0;
}``````

I think what is possibly the error is that the value inputted is not viewed by the code as a valid input no matter what is entered.

Allow me to thank you now for your help.

Randy
:rolleyes: