问题标签 [fflush]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
2004 浏览

c - fflush(stdin) 不能在 cygwin 中使用 gcc 编译,但可以使用 Visual Studio 2010 编译

我正在(重新)学习编程,我从 C 开始。我的 IDE(如果我可以这么说的话)是 Windows7 上的 cygwin(32 位)和 Visual-Studio 2010。我总是使用 gcc (cygwin) 以及 VS2010 编译器编译我编写的代码。我想,我这样做是因为我认为这是一种很好的学习方式。无论如何,我刚刚了解了 fflush(stdin),即刷新标准输入缓冲区。似乎是一个很好的功能,因为否则,使用 scanf 似乎很痛苦。所以我根据我教科书中的一个例子编写了下面的代码。它既可以用 cygwin 中的 gcc 编译,也可以用 VS2010 编译。当我运行 VS 编译程序时它工作正常(s.below),当我在 cygwin 中运行 gcc 编译程序时,fflush(stdin)不会刷新 stdin 缓冲区(s.below)。我已经阅读了一些关于 fflush(stdin) 在某些情况下具有未定义行为的线程。不管这可能意味着什么,我从 C for Linux Programming 教科书中摘录了它。如果 fflush(stdin) 不是清除标准输入缓冲区中内容的有效方法,还有什么其他标准方法?

非常感谢任何答案!

==程序在Windows下运行:

==程序在 Cygwin 中运行:

==代码====

0 投票
2 回答
109 浏览

c - 在实现永远循环时遇到问题

我似乎遇到了永远循环的问题,它似乎在我第一次运行程序时工作,但由于某种原因,它似乎跳过了询问用户是否想再输入 CD 的选项......任何帮助将不胜感激,谢谢!

0 投票
1 回答
336 浏览

c - fflush() 没有正确刷新

我正在用 C 创建一个非常简单的程序执行计时器。我将在下面提供示例代码。问题是,当使用+ (即信号)结束程序时,fflush(NULL)它不会刷新所有内容。它们有时仍然出现在消息之后,我想知道为什么。"Hello World\n"stdoutCtrlCSIGINTEstimated running time...

定时器.c

计时器.h:

timerTest.c

0 投票
2 回答
1569 浏览

c - 从信号处理程序调用 fflush 是否安全?

好吧,标题说明了大部分内容。

假设我的应用程序正在记录到标准输出/文件。但是,当终止时,它并不总是完全刷新。一种解决方案是在每次记录操作后刷新,但是这会减慢程序的速度,令人无法接受。

所以,问题是,fflush(file)从信号处理程序调用是否安全,甚至可能fflush(NULL)

如果不是,请说明原因。这个问题还有其他解决方案吗?如果我知道我不在文件处理程序中,这可能安全吗?

0 投票
2 回答
1199 浏览

c - 验证输入并清除键盘缓冲区

如果在这段代码中输入了一个或更多字符,我将如何清除缓冲区。

我的导师坚持我们使用 fflush(stdin)。我知道这行不通,所以我打电话给他。我还有什么其他方法可以验证是否输入了数字。

0 投票
4 回答
213 浏览

c - 简单的 minishell,由于 fgets 的工作方式,无法识别“退出”以结束程序

我正在尝试使用以下代码编写一个 minishell:

它工作正常,但是当我输入“退出”时,程序并没有结束。我想它一定与 fgets 以及它在字符串 str 的末尾将 EOF 作为另一个字符合并的事实有关,所以当我将它与“quit”进行比较时,它不是同一个字符串。我不知道从标准输入读取的字符串中提取 \n 字符的正确方法是什么。¿ 有人可以帮帮我吗?

我想问的另一个问题是在这段代码中使用 fflush 是否是个好主意。谢谢

0 投票
2 回答
95 浏览

c - Proper char handling

When compiling to Linux with gcc, everytime the user inputs whatever answer, the program reaches the same part of the code in other iteration but doesn't waits for the input of the user, and instead feeds a newline to the scanf function, making the program print 'I don't get it!' every time... The program works, but still, I didn't want it to write 'I don't get it!', independent of the users' answer. Here's the specific part of the code.

These are the declarations:
char v[64];
char ans;

(This do..while loop is inside a 'for') What further puzzles me is the fact that the program compiles and runs exactly as I'd expect on Windows... (using MinGW) I've tried using fflush(stdin) before and/or after the scanf, but it didn't help. An important observation is that the first time it reaches this question it acts as expected.

(before the user answers)
Answer: (y/n)
I don't get it! // this gets written every time but the first

Answer: (y/n) n

You are 21 years old!

If the user writes invalid input:

Answer: (y/n) w

I don't get it!

Answer: (y/n) // this line and the next one should simply not be printed
I don't get it!

Answer: (y/n)
//(now it waits for user input)

Any ideas?

Edit

Fixed it: (I declared an additional char buf[50])

Can someone tell me what is the problem with scanf?

0 投票
1 回答
274 浏览

c - fflush(FILE *stream) not working?

I tried to replace character after u with b in a file pointed by *ft.

This code runs fine but when I open the file it seemed to be unedited.

The above code works fine with fseeks(ft,0,SEEK_CUR).

Why it is not working with fflush(ft).

0 投票
5 回答
9503 浏览

c - 程序在 scanf() 之后不执行 gets(),即使使用 fflush(stdin)

在浪费了太多时间搜索为什么我的程序在使用 scanf() 后不执行 gets() 之后,我找到了一个解决方案,即在 scanf() 之后使用 fflush(stdin) 来启用 gets() 以获取字符串。

问题是 fflush(stdin) 没有达到预期的效果:程序继续跳过gets(),我无法在控制台中写入任何要读取的短语。

我的代码是下一个:

0 投票
2 回答
124 浏览

c - 关于箭头键和 fflush(stdin) 的输出

正如我们所知,arrow keys产生两个输出,即224 and (72 or 80 or 75 or 77)

代码 1:-

在上述情况下,我输入一个arrow key然后224存储在ch,相应的输出存储在ch1

代码 2:-

同样的事情也发生在代码 2 中。
所以我想知道为什么fflush(stdin)不将相应的输出刷新到224.