Reputation: 41
Working on this assignment. Not sure how to get out of the while loop and I can't use anything more advanced than a while loop. I tried casting the int to a char but that didn't work. Below is my code. Any help would be appreciated.
/* This program has the user input a number. This number is then printed out in degrees F, C and K*/
#include <stdio.h>
#define KEL 273.16
#define CEL1 32
#define CEL2 0.5555
void temperatures(double temp);
int main(void)
{
double tempF; // Temperature the user inputs
char userinput; // Quit character the user inputs
userinput = 'a';
tempF = 0;
printf("Enter a temperature in degrees Farenheit or enter q to quit:\n");
scanf_s("%lf", &tempF);
//scanf_s("%c", &userinput);
while ((char)tempF != 'q')
{
temperatures(tempF);
printf("Enter a temperature in degrees Farenheit or enter q to quit:\n");
scanf_s("%lf", &tempF);
//scanf_s("%c", &userinput);
}
printf("Goodbye!\n");
return 0;
}
void temperatures(double temp)
{
double celsius;
double kelvins;
celsius = (temp - CEL1) * CEL2;
kelvins = celsius + KEL;
printf("%lf F is %lf degrees C or %lf degrees K.\n", temp, celsius, kelvins);
}
Upvotes: 0
Views: 7542
Reputation: 206567
You need to change your strategy.
q
, then exit.sscanf
.Here's a version of main
that does that.
int main(void)
{
double tempF; // Temperature the user inputs
char line[200];
while ( 1 )
{
printf("Enter a temperature in degrees Fahrenheit or enter q to quit:\n");
// Read a line of text.
if (fgets(line, sizeof(line), stdin) == NULL )
{
break;
}
if ( line[0] == 'q' )
{
break;
}
if ( sscanf(line, "%lf", &tempF) == 1 )
{
// Got the temperature
// Use it.
}
else
{
// The line does not have a number
// Deal with the error.
}
}
printf("Goodbye!\n");
return 0;
}
Upvotes: 4
Reputation: 76426
You can read characters with
char c;
while (c != 'q') {
scanf("%c", &c);
//parse command
}
Upvotes: 0
Reputation: 2837
You should read the input as string (scanning a string) and convert it (atof), than use strcmp to compare the input string with your exit command. You can also use isdigit to check your input (not try to convert anything that is not a number)
Upvotes: 1