在 C 中使用 fgets 进行输入

Using fgets for input in C

我正在尝试在函数中使用 fgets 来获取 C 中的输入。我的代码显示正确,但是它不遵循我在 do/while 循环中的参数(如果我在范围,它继续执行程序,而不是重复循环直到输入正确)。我试过修补它,但我无法弄清楚我的问题是什么。我认为这可能与将输入作为字符而不是整数有关。但是我尝试将我的入口变量转换为一个 int,但这没有帮助。非常感谢任何帮助!

{
 char  line[MAX_LINE];

 int   entry;

    do
    {
     printf("Please enter %s(%d-%d) ", descriptionCPtr, low, high);
     fgets(line, MAX_LINE, stdin);
     entry = (int)line[0];
    }

    while(entry < low || entry > high);
    return(entry);
}

你的直觉是正确的。您没有正确地将用户输入转换为数值。 fgets 读取用户输入并将其(与 \n 一起)存储到 line 变量中;字符数组。假设用户是一位年届 99 的老人,因此 line 将是 99\n 和 [=19= 的数组] 人物。然而,在下一行中,您将字符 9(ASCII 代码为 57)的 line[0] 转换为一个整数,并将 57 分配给 entry。嗯,这可能不是你想要在这里实现的。

对于这种情况,我推荐的解决方案是使用 scanf 而不是 fgets

int age;

scanf("%d", &age);
if (age < min_age || age > max_age)
    printf("age not valid\n");

如果你想坚持使用 fgets,你可以删除换行符并用像 atoi 这样的调用函数替换转换(顺便说一下,这并不安全)来转换 line成整数。