Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 更换fflush(标准DIN)_C - Fatal编程技术网

C 更换fflush(标准DIN)

C 更换fflush(标准DIN),c,C,我有下面的代码 fflush(stdin); print("Enter y/n"); scanf("%c",&a); 在这里,它是在给出输入之前退出的。问题似乎是因为它没有刷新输入缓冲区,而输入缓冲区可能包含一些垃圾字符。是否有刷新(stdin)的替代方案。此代码段在Solaris中工作,但在Linux中不工作。这在中得到了很好的解释。另见:。拟议的解决办法: 使用scanf退出。使用fgets和sscanf 用这个来吃新线 while((c = getchar()) != '\n'

我有下面的代码

fflush(stdin);
print("Enter y/n");
scanf("%c",&a);

在这里,它是在给出输入之前退出的。问题似乎是因为它没有刷新输入缓冲区,而输入缓冲区可能包含一些垃圾字符。是否有刷新(stdin)的替代方案。此代码段在Solaris中工作,但在Linux中不工作。

这在中得到了很好的解释。另见:。拟议的解决办法:

  • 使用scanf退出。使用
    fgets
    sscanf
  • 用这个来吃新线

    while((c = getchar()) != '\n' && c != EOF)
    /* discard the character */;
    
刷新stdin在某些实现上起作用的事实

一些供应商确实是这样实现的 该fflush(stdin)丢弃未读的内容 字符,尽管是可移植的程序 这是不可能的

对于GNU上的C

你可以用

包括用于访问函数的stdio_ext.h头。虽然这篇文章很老了,但我认为这可能会对一些linux开发人员有所帮助

scanf(" ");
//reading operation (gets(), fgets(stdin,...) etc)


scanf()格式字符串中的空格将忽略任何空格,直到第一个非空格。

man fflush的第一行读取:函数
fflush()
强制写入给定输出或更新流的所有用户空间缓冲数据。cnicutar对于如何跳过不需要的输入有正确的答案,但除此之外,您还应该阅读您正在使用的函数的文档。并检查它们的返回值。。。因为您上面的调用将返回
EOF
并设置
errno=EBADF
,以表明您错误使用了该函数。忽略返回值是不好的,不好的,不好的…另请参见。这很可怕,即使它按预期工作。想象一下,如果输入来自文件或管道,会发生什么。
scanf(" %c",&c);
scanf(" ");
//reading operation (gets(), fgets(stdin,...) etc)