在 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
将是 9
、9
、\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
成整数。
我正在尝试在函数中使用 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
将是 9
、9
、\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
成整数。