从输入中获取特定范围的浮点数

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