在C中使用fgets进行输入

时间:2017-01-11 02:24:18

标签: c fgets

我试图在函数中使用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);
}

1 个答案:

答案 0 :(得分:0)

你的直觉是正确的。您没有正确地将用户输入转换为数字值。 fgets读取用户输入并将其(以及\n)存储到line变量中;一个字符数组。我们假设用户是进入其年龄99的老人,因此line将是99\n\0个字符。但是,在下一行中,您将line[0](字符9(ASCII码为57)转换为整数并将57分配给entry。嗯,这可能不是你打算在这里实现的目标。

我针对此案例推荐的解决方案是使用scanf代替fgets

int age;

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

如果你想坚持使用fgets,你可以删除新的行字符,并用调用函数替换强制转换,如atoi(顺便说一下,这不是很安全)将line转换为整数