25 int InputPromptWidth = 25;
27 static bool safe_gets(
char * buffer,
int n)
31 bool success = (fgets(buffer, n, stdin) != NULL);
33 for (
char * ptr = buffer; *ptr != 0; ptr++)
40 void Input(
const char * prompt,
int & n,
int _default)
47 printf(
"%*s [%8d]: ", InputPromptWidth, prompt, _default);
48 safe_gets(buffer, BUFSIZE);
49 success = sscanf(buffer,
"%d", &n);
56 void Input(
const char * prompt,
char & ch,
char _default)
63 printf(
"%*s [%8c]: ", InputPromptWidth, prompt, _default);
64 safe_gets(buffer, BUFSIZE);
65 success = sscanf(buffer,
"%c", &ch);
72 void Input(
const char * prompt,
double & d,
double _default)
79 printf(
"%*s [%8.2f]: ", InputPromptWidth, prompt, _default);
80 safe_gets(buffer, BUFSIZE);
81 success = sscanf(buffer,
"%lf", &d);
88 void Input(
const char * prompt,
bool & b,
bool _default)
96 printf(
"%*s [%8s]: ", InputPromptWidth, prompt, _default ?
"Y/n" :
"y/N");
97 safe_gets(buffer, BUFSIZE);
98 success = sscanf(buffer,
"%c", &c);
116 while (success == 0);
120 void Input(
const char * prompt,
char * s,
const char * _default)
122 char buffer[BUFSIZE];
127 printf(
"%*s [%8s]: ", InputPromptWidth, prompt, _default);
128 safe_gets(buffer, BUFSIZE);
129 success = sscanf(buffer,
" %[^\n]", s);
133 while (success == 0);
136 void InputBounds(
const char * prompt,
int & n,
int min,
int max,
139 Input(prompt, n, _default);
140 while ((n < min) || (n > max))
142 printf(
"\n*** Input value must be between %d and %d ***\n", min, max);
143 Input(prompt, n, _default);
147 void InputBounds(
const char * prompt,
double & d,
double min,
double max,
150 Input(prompt, d, _default);
151 while ((d < min) || (d > max))
153 printf(
"\n*** Input value must be between %.2f and %.2f ***\n", min, max);
154 Input(prompt, d, _default);