我已经用谷歌搜索这个问题几个小时了,到目前为止我还没有看到任何提及它。
int getInt()
{
char* rawin = (char*)malloc(100);
printf("How big should the secret code be?\n(Input number of elements):\n");
while(fgets(rawin, 100, stdin) != NULL)
{
if (sscanf(rawin,"%d") == 1)
{
break;
}
printf("Numbers only please.\n");
}
int in = atoi(rawin);
free(rawin);
return in;
}
如果我两次调用此函数,无论我第一次调用哪个都可以正常工作,但第二个会表现得很奇怪。与进入 while 循环不同,程序的行为就像在 fget 上无限循环一样。fgets 的第二次调用永远不会完成,因此永远不会返回任何内容。调试时,永远不会到达“while(fgets...”之后任何位置的断点,包括循环之后。我尝试将“\n”、“\0”和“\n\0”附加到标准输入的末尾,它什么也没做。我尝试通过读出每个不是“\n”或\0'的字符来“刷新”标准输入,这也没有做任何事情。
编辑:为了澄清,“if”语句中的条件是一个占位符。