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 */;
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)