"flush the input buffer" 是什么意思?
What does it mean to "flush the input buffer"?
int prompt(const char *output_message, char *input, const int MAX_SIZE)
{
printf("%s", output_message);
int i = 0;
char ch = '[=11=]';
while (1)
{
ch = (char)getchar();
if (ch == '\n' || ch == EOF)
{
break;
}
else if (i < (MAX_SIZE - 1))
{
input[i++] = ch;
}
}
input[i] = '[=11=]';
return i;
}
我写了这个函数来获取用户输入的输入字符串。所以 getchar() 正在遍历缓冲区,直到到达换行符或文件末尾。我的问题是刷新输入缓冲区是否意味着将 FILE 指针(或那里的任何实现)从缓冲区中当前写入的部分移开,就像我正在使用 getchar() 一样? “刷新输入缓冲区”实际上是什么意思?
“刷新输入缓冲区”指的是尝试从输入流中丢弃不需要的字符,以免它们干扰以后的输入调用。
在您的代码中,您似乎不会遇到此问题,因此刷新输入缓冲区对您来说应该不是问题。
当您使用 scanf
进行输入时,通常会出现不需要的输入问题。 scanf
通常将用户的换行符留在输入缓冲区中,但稍后调用 getchar
或 fgets
(甚至 scanf
)可能会因此而严重混淆。
刷新输入的问题是没有真正好的方法。一种流行但 不 推荐的技术是调用 fflush(stdin)
。看起来它应该只是门票,但问题是它没有明确定义并且不能保证工作(尽管一些程序员发现它在某些平台上对他们来说已经足够好了)。
有关此问题的更多信息,请参阅 this question and (maybe also this one)。
int prompt(const char *output_message, char *input, const int MAX_SIZE)
{
printf("%s", output_message);
int i = 0;
char ch = '[=11=]';
while (1)
{
ch = (char)getchar();
if (ch == '\n' || ch == EOF)
{
break;
}
else if (i < (MAX_SIZE - 1))
{
input[i++] = ch;
}
}
input[i] = '[=11=]';
return i;
}
我写了这个函数来获取用户输入的输入字符串。所以 getchar() 正在遍历缓冲区,直到到达换行符或文件末尾。我的问题是刷新输入缓冲区是否意味着将 FILE 指针(或那里的任何实现)从缓冲区中当前写入的部分移开,就像我正在使用 getchar() 一样? “刷新输入缓冲区”实际上是什么意思?
“刷新输入缓冲区”指的是尝试从输入流中丢弃不需要的字符,以免它们干扰以后的输入调用。
在您的代码中,您似乎不会遇到此问题,因此刷新输入缓冲区对您来说应该不是问题。
当您使用 scanf
进行输入时,通常会出现不需要的输入问题。 scanf
通常将用户的换行符留在输入缓冲区中,但稍后调用 getchar
或 fgets
(甚至 scanf
)可能会因此而严重混淆。
刷新输入的问题是没有真正好的方法。一种流行但 不 推荐的技术是调用 fflush(stdin)
。看起来它应该只是门票,但问题是它没有明确定义并且不能保证工作(尽管一些程序员发现它在某些平台上对他们来说已经足够好了)。
有关此问题的更多信息,请参阅 this question and