我在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)
  }
我得到的输出是:
Enter some value: 10
然后程序结束.就这样.我在Linux中可以做什么?有替代功能吗?
Mat*_*uin 11
不要使用fflush,而是使用此功能:
#include <stdio.h>
void clean_stdin(void)
{
    int c;
    do {
        c = getchar();
    } while (c != '\n' && c != EOF);
}
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);
}
您不仅可以将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,否则返回零。