Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C中使用FGET进行输入_C_Fgets - Fatal编程技术网

在C中使用FGET进行输入

在C中使用FGET进行输入,c,fgets,C,Fgets,我试图在函数中使用fgets来获取C中的输入。我的代码正确显示,但是它不遵循do/while循环的参数(如果我输入了超出范围的数字,它将继续执行程序,而不是重复循环,直到输入正确为止)。我尝试过修补它,但我不知道我的问题是什么。我认为这可能与将输入作为字符而不是整数有关。但我尝试将我的entry变量转换为int,但没有任何帮助。非常感谢您的帮助 { char line[MAX_LINE]; int entry; do { printf("Please en

我试图在函数中使用fgets来获取C中的输入。我的代码正确显示,但是它不遵循do/while循环的参数(如果我输入了超出范围的数字,它将继续执行程序,而不是重复循环,直到输入正确为止)。我尝试过修补它,但我不知道我的问题是什么。我认为这可能与将输入作为字符而不是整数有关。但我尝试将我的entry变量转换为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);
}
{
字符行[最大行];
整数输入;
做
{
printf(“请输入%s(%d-%d)”,descriptionptr,低,高;
fgets(线路、最大线路、标准线路);
条目=(int)行[0];
}
而(入口<低| |入口>高);
报税表(报税表);
}

你的直觉是正确的。您没有正确地将用户输入转换为数值
fgets
读取用户输入并将其(连同
\n
)存储到
变量中;一组字符。让我们假设用户是一位进入年龄的老人,
99
,因此
line
将是一个由
9
9
\n
\0
字符组成的数组。但是,在下一行中,您要将字符
9
(使用ASCII代码57)的
行[0]
强制转换为整数,并将57赋值给
条目
。好吧,这可能不是你想要达到的

对于这种情况,我建议使用
scanf
而不是
fgets

int age;

scanf("%d", &age);
if (age < min_age || age > max_age)
    printf("age not valid\n");
int年龄;
scanf(“%d”和年龄);
如果(年龄<最小年龄>最大年龄)
printf(“年龄无效\n”);

如果您想继续使用fgets,可以删除新行字符,并用调用函数替换强制转换,例如
atoi
(顺便说一句,这并不安全)将
line
转换为整数。

您进行过任何基本调试吗?例如使用调试器或打印
条目
值?当然,在寻求帮助之前,你可以了解更多关于这个问题的信息。我打印了我的输入值,它一直给我一个“45”或“52”。不知道它从哪里来,line给了我119054520。那么,为什么你不提供那个信息并询问它,而不是
while
循环?因为很明显,
条目
不是您所期望的,这是故障的初始点。我建议你回顾一下casting的工作。它不能将字符串转换为它的
int
等价项。然后向上看。如果你不能100%确定石膏的作用,千万不要使用石膏!没有任何冒犯,但你显然不知道演员是为了什么。简而言之:强制转换不适用于字符串到数字的转换。记住,其余的应该很容易找到。最好检查fgets的返回代码,如下所示:
if(fgets(line,MAX\u line,stdin)!=NULL)