Tag: flush

查看输入缓冲区,并刷新C中的额外字符

如果我想在C中接收一个字符输入,我将如何检查是否发送了额外的字符,如果是,我将如何清除它? 是否有一个像getc(stdin)一样的函数,但它不会提示用户输入一个字符,所以我可以把while(getc(stdin)!=EOF); ? 或者是一个查看缓冲区中下一个字符的函数,如果它没有返回NULL(或者其他任何东西),我可以调用一个(nother)函数来刷新stdin? 编辑 所以现在,scanf似乎正在做的伎俩,但有没有办法让它读取整个字符串,直到换行? 而不是最近的空白? 我知道我可以将“%s%s%s”或其他任何内容添加到格式字符串中但是我可以处理任意数量的空格吗?

在退出之前是否保证stdout自动刷新? 它是如何工作的?

这是代码(有效的C和C ++) #include int main() { printf(“asfd”); // LINE 1 return 0; } 如果在第1行中我放置segfaulting表达式,程序将崩溃而不打印任何东西(如预期的那样)。 但是为什么上面的代码打印“asdf”并且在没有刷新缓冲区的情况下不会被刷新? 什么是引擎盖下的,为什么它按预期工作?

如何在C中检查stdin是否为空

我(重新)学习C编程,所以下面的问题是为了理解。 使用scanf()我学会了(或者我自己发现,实际上并不需要很长时间才能达到这一点),冲洗stdin是一件好事。 我进一步发现(在你的帮助下)fflush(stdin)不是标准的事情,例如与gcc不兼容。 我继续使用下面的代码片段来刷新stdin。 它在这里提供(谢谢)。 如果stdin不为空,它工作正常。 然而,如果stdin是空的,它就不起作用。 我的刷新函数中的fgetc()只是等待并阻止程序。 事实上,到目前为止我所知道的所有其他stdin读取函数(scanf(),fgetc(),gets(),fgets(),getchar())都表现出相同的行为。 所以我的刷新函数实际上是一个条件刷新:它只在缓冲区不为空时才刷新。 如果它为空,则刷新阻塞程序并等待stdin的输入。 这不是我想要的。 所以,我需要的是检查stdin是否为空的方法。 如果是我继续。 如果不是我运行我的冲洗function。 所以,我正在寻找的是一种检查标准输入是否为空的C标准方法。 非常感谢您的帮助! void flush_line(FILE *); /* function to flush stdin in a C standard way since*/ /* fflush(stdin) has undefined behaviour. */ /* s. http://stackoverflow.com/questions/20081062/fflushstdin-does-not-work-compiled-with-gcc-in-cygwin-but-does-compiled-with-v */ void flush_line(FILE *fin) { int ch; do { ch = fgetc(fin); } while (ch […]

C – 跳过用户输入?

我想要一个菜单​​,你可以从中选择一些动作。 问题是,当我们选择一个,并按下“返回”键时,将跳过应该是下一步的用户输入命令。 这是为什么 ? 代码是: #include #include int main(int argc, char *argv[]) { int choice; do { printf(“Menu\n\n”); printf(“1. Do this\n”); printf(“2. Do that\n”); printf(“3. Leave\n”); scanf(“%d”,&choice); switch (choice) { case 1: do_this(); break; case 2: // do_that(); break; } } while (choice != 3); return(0); } int do_this() { char name[31]; printf(“Please enter a […]

读取stdin冲洗stdout吗?

当连接到终端时,stdout是行缓冲的,但我记得在某处阅读(至少从stdin)将自动刷新stdout。 我使用的所有C实现都已经完成了,但我现在无法在标准中找到它。 它确实有意义,它是这样的,否则代码是这样的: printf(“Type some input: “); fgets(line, sizeof line, stdin); 需要额外的fflush(stdout); 那么stdout保证会在这里刷新吗? 编辑: 正如几个回复所说,标准中似乎无法保证我的示例中的stdout输出将在从stdin读取之前出现,但另一方面,这个意图在(我的免费草稿副本)中说明了标准: 交互设备的输入和输出动态应按照7.19.3的规定进行。 这些要求的目的是尽快出现无缓冲或行缓冲输出,以确保在程序等待输入之前实际出现提示消息。 (ISO / IEC 9899:TC2委员会草案 – 2005年5月6日,第14页)。 所以似乎没有保证,但无论如何它可能适用于大多数实现。 (著名遗言…)