繁体   English   中英

在 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\\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转换为整数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM