0

Hey guys, I need some help with looping. I am writing a currency converter (who in begining programming isn't these days) and I want to have it loop so that I can it keep asking for another entry or make it quit. Here is what I have so far:

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

/* Main Program */
int main(void)
{

float USD;
float CAD;
float EUR;
float GBP;
float CHF;
float YEN;
int input;
char q;

/*Title of program*/
printf("\t This program will convert foreign currency to US Dollars\n\n");

/*Assigning Values*/
 USD = 1.0; /* US Dollar*/
 CAD = 1.2257; /* Canadian Dollar*/
 EUR = 0.752162; /* European Euro */
 GBP = .51573; /* British Pound */
 CHF = 1.134; /* Swiss Franc*/
 YEN = 1.038; /* Japanese Yen*/

printf("Please choose form the following list of currency or press q to quit.\n"); 
printf("\n");
printf("[1] Canadian Dollar\n");
printf("[2] British Pound\n");
printf("[3] European Euro\n");
printf("[4] Swiss Franc\n");
printf("[5] Japanese Yen\n"); 
printf("\n");
scanf("%d", &input);


	/*switching statements */
	switch (input)
	{
	case 1 : 
	 printf("%1.6f Canadian Dollars is equal to %1.1f US Dollar.\n", CAD,USD);
	break;
	case 2 :
	 printf("%1.6f European Euro is equal to %1.1f US Dollar.\n", EUR,USD); 
	break;
	case 3 :
	 printf("%1.6f British Pound is equal to %1.1f US Dollar.\n", GBP,USD);
	break;
	case 4 : 
	 printf("%1.6f Swiss Franc is equal to %1.1f US Dollar.\n", CHF,USD);
	break;
	case 5 :
	 printf("%1.6f Japanese Yen is equal to %1.1f US Dollar.\n", YEN,USD); 
	break;
	}

scanf("%d");
return 0;
}
3
Contributors
3
Replies
4
Views
12 Years
Discussion Span
Last Post by wardduncan
0

use a while loop checking if q is pressed. You havent actually used char, and are asking the user to input a letter or number, but only grabbing the number! I would convert to c++ and use iostream, I dont know the C equivalent

char input; // user will type, so input is a char!

while (input != 'q' || input != 'Q') // loops untill you put q or Q in input
{
   code here...
   I would use cin >> input;
   then a strtoi (i think that is how it is spelled) call to convert the char to a number
}
0

Unless you want to do precise error handling and throw a message if the user enters something other than q or Q, you can simply place the entire processing code into an infinite loop and break if scanf fails:

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

/* Main Program */
int main(void)
{
  float USD;
  float CAD;
  float EUR;
  float GBP;
  float CHF;
  float YEN;
  int input;

  /*Title of program*/
  printf("\t This program will convert foreign currency to US Dollars\n\n");

  /*Assigning Values*/
  USD = 1.0f; /* US Dollar*/
  CAD = 1.2257f; /* Canadian Dollar*/
  EUR = 0.752162f; /* European Euro */
  GBP = .51573f; /* British Pound */
  CHF = 1.134f; /* Swiss Franc*/
  YEN = 1.038f; /* Japanese Yen*/

  for (;;) {
    printf("Please choose form the following list of currency or press q to quit.\n"); 
    printf("\n");
    printf("[1] Canadian Dollar\n");
    printf("[2] British Pound\n");
    printf("[3] European Euro\n");
    printf("[4] Swiss Franc\n");
    printf("[5] Japanese Yen\n"); 
    printf("\n");
    if (scanf("%d", &input) != 1)
      break;

    /*switching statements */
    switch (input)
    {
    case 1 : 
      printf("%1.6f Canadian Dollars is equal to %1.1f US Dollar.\n", CAD,USD);
      break;
    case 2 :
      printf("%1.6f European Euro is equal to %1.1f US Dollar.\n", EUR,USD); 
      break;
    case 3 :
      printf("%1.6f British Pound is equal to %1.1f US Dollar.\n", GBP,USD);
      break;
    case 4 : 
      printf("%1.6f Swiss Franc is equal to %1.1f US Dollar.\n", CHF,USD);
      break;
    case 5 :
      printf("%1.6f Japanese Yen is equal to %1.1f US Dollar.\n", YEN,USD); 
      break;
    }
  }

  return 0;
}

That's the easiest solution. If you want something more structured and good error messages, it takes more effort, usually in the form of string input and validation followed by conversions.

0

Thanks for your help. This is exactly what I needed. You made it look so easy.

This question has already been answered. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.