我在Linux GCC中使用了fflush()但它没有用.该功能有其他替代方案吗?这是我的代码:
#include<stdio.h>
void main()
{
char ch='y';
while(ch=='y')
{
int a;
printf("Enter some value:");
scanf("%d",&a);
fflush(stdin);
printf("Do you want to continue?");
scanf("%c",&ch)
}
Run Code Online (Sandbox Code Playgroud)
我得到的输出是:
Enter some value: 10
Run Code Online (Sandbox Code Playgroud)
然后程序结束.就这样.我在Linux中可以做什么?有替代功能吗?
Mat*_*uin 11
不要使用fflush,而是使用此功能:
#include <stdio.h>
void clean_stdin(void)
{
int c;
do {
c = getchar();
} while (c != '\n' && c != EOF);
}
Run Code Online (Sandbox Code Playgroud)
fflush(stdin)取决于实现,但此功能始终有效.在C中,使用它被认为是不好的做法fflush(stdin).
始终在 Linux 上运行的一种:
#include <termios.h>
#include <unistd.h>
void clean_stdin()
{
int stdin_copy = dup(STDIN_FILENO);
/* remove garbage from stdin */
tcdrain(stdin_copy);
tcflush(stdin_copy, TCIFLUSH);
close(stdin_copy);
}
Run Code Online (Sandbox Code Playgroud)
您不仅可以将tcdrain和tcflush用于 in/out/err fd。
fflush未针对输入流定义的行为(在线 2011 标准):
7.21.5.2fflush函数
概要
1Run Code Online (Sandbox Code Playgroud) 描述#include <stdio.h> int fflush(FILE *stream);
2 如果流指向未输入最近操作的输出流或更新流,则该fflush函数会导致该流的任何未写入数据被传送到主机环境以写入文件;否则,行为是未定义的。
3 如果stream是空指针,则该fflush函数对上面定义了行为的所有流执行此刷新操作。
返回
4 该fflush函数设置流的错误指示符,如果发生写入错误,则返回 EOF,否则返回零。
| 归档时间: |
|
| 查看次数: |
24828 次 |
| 最近记录: |