Cleaning up little temperature converter program
based a bit on how the example qsort program was written, plus fixing a pedantic error.
This commit is contained in:
parent
02699f591f
commit
13257b1ecc
@ -1,6 +1,7 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <libgen.h>
|
||||||
|
|
||||||
|
|
||||||
double c2f(double celsius) {
|
double c2f(double celsius) {
|
||||||
@ -13,43 +14,44 @@ double f2c(double fahrenheit) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int usage(const char *msg) {
|
void usage(const char *prog, const char *msg) {
|
||||||
printf("Usage: temperatures <temp>[fFcC]\n");
|
fprintf(stderr, "Usage: %s <temp>[fFcC]\n", prog);
|
||||||
if (msg != NULL) {
|
if (msg != NULL) {
|
||||||
printf("%s\n", msg);
|
fprintf(stderr, "%s\n", msg);
|
||||||
}
|
}
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int main(int argc, char * argv[]) {
|
int main(int argc, char * argv[]) {
|
||||||
if (argc < 2) {
|
const char * prog = basename(argv[0]);
|
||||||
usage(NULL);
|
|
||||||
return 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
int ret;
|
int ret;
|
||||||
char msg[255];
|
char msg[255];
|
||||||
double temp;
|
double temp;
|
||||||
char scale = '\0';
|
char scale = '\0';
|
||||||
const char *in_fmt = "%lf%c";
|
const char *in_fmt = "%lf%c";
|
||||||
const char *out_fmt = "%.2lf%c\n";
|
const char *out_fmt = "%.2lf%c\n";
|
||||||
|
const char *temp_string;
|
||||||
|
|
||||||
|
if (argc < 2) {
|
||||||
|
usage(prog, NULL);
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
if (((int)strlen(argv[1]) == 1) && (argv[1][0] == '-')) {
|
if (((int)strlen(argv[1]) == 1) && (argv[1][0] == '-')) {
|
||||||
ret = fscanf(stdin, in_fmt, &temp, &scale);
|
ret = fscanf(stdin, in_fmt, &temp, &scale);
|
||||||
} else {
|
} else {
|
||||||
const char * temp_string = argv[1];
|
temp_string = argv[1];
|
||||||
ret = sscanf(temp_string, in_fmt, &temp, &scale);
|
ret = sscanf(temp_string, in_fmt, &temp, &scale);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((ret == 0) || (ret == EOF)) {
|
if ((ret == 0) || (ret == EOF)) {
|
||||||
usage("No temperature provided!");
|
usage(prog, "No temperature provided!");
|
||||||
return 1;
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ret == 1) {
|
if (ret == 1) {
|
||||||
usage("No scale provided!");
|
usage(prog, "No scale provided!");
|
||||||
return 1;
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (scale) {
|
switch (scale) {
|
||||||
@ -63,9 +65,9 @@ int main(int argc, char * argv[]) {
|
|||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
sprintf(msg, "Unknown scale: '%c'", scale);
|
sprintf(msg, "Unknown scale: '%c'", scale);
|
||||||
usage(msg);
|
usage(prog, msg);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
exit(EXIT_SUCCESS);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user