从输入中获取特定范围的浮点数
get a specific range of floats from input
所以我选择了哈佛的 CS50,这可能会让那些选择课程并遇到这个问题的人受益。
我正在制作一个名为 Resize 的程序,我们在其中使用 3 个命令行参数,第一个是 'f'。准确引用:
the first (f) must be a floating-point value in (0.0, 100.0].
问题是:如何从命令行参数设置可接受值的范围。
我应该使用 sscan() 和 atof() 函数来做到这一点。
无法限制命令行参数,因为它完全由命令的用户决定。您可以做的是获取参数并根据您的要求进行检查。在您的情况下,获取参数,然后将其转换为双精度值并检查它是否在所需范围内。
if (argc != 4) {
puts("not enough argument");
exit(1);
}
char *strf = argv[1];
char *end = NULL;
double f = strtod(strf, &end);
if (end == strf || *end != '[=10=]') {
puts("not a valid floating point value");
exit(1);
}
if (errno == ERANGE) {
puts("value out of range");
exit(1);
}
if (f <= 0.0 || f > 100.0) {
puts("value not in required range");
exit(2);
}
// ... do other work with f
所以我选择了哈佛的 CS50,这可能会让那些选择课程并遇到这个问题的人受益。
我正在制作一个名为 Resize 的程序,我们在其中使用 3 个命令行参数,第一个是 'f'。准确引用:
the first (f) must be a floating-point value in (0.0, 100.0].
问题是:如何从命令行参数设置可接受值的范围。 我应该使用 sscan() 和 atof() 函数来做到这一点。
无法限制命令行参数,因为它完全由命令的用户决定。您可以做的是获取参数并根据您的要求进行检查。在您的情况下,获取参数,然后将其转换为双精度值并检查它是否在所需范围内。
if (argc != 4) {
puts("not enough argument");
exit(1);
}
char *strf = argv[1];
char *end = NULL;
double f = strtod(strf, &end);
if (end == strf || *end != '[=10=]') {
puts("not a valid floating point value");
exit(1);
}
if (errno == ERANGE) {
puts("value out of range");
exit(1);
}
if (f <= 0.0 || f > 100.0) {
puts("value not in required range");
exit(2);
}
// ... do other work with f