fflush(stdin)在下面的代码中如何改变输出?

#include <stdio.h> int main() { int test_no ,count=1,i,n,j; scanf("%d",&test_no); fflush(stdin); int arr1[test_no]; for(i=0;i<test_no;i++) { scanf("%d",&n); printf("\n"); int arr[n]; for(j=0;j<n;j++) { fflush(stdin); scanf("%d",&arr[i]); } for(j=1;j<=n-1;j++) { if(arr[j-1]>arr[j]) { count++; } } if(n==1) { arr1[i]=1; } else { arr1[i]=count; } count=1; } for(i=0;i<test_no;i++) { printf("%d\n",arr1[i]) ; } return 0; } 

这个解决scheme就是这个问题 。

我没有得到第三种情况所需的输出,它给我输出3或4取决于我是否在scanf("%d",arr[i])scanf("%d",arr[i]) fflush(stdin)之前放置fflush(stdin) scanf("%d",arr[i]) ,请告诉这个代码的问题。

没有 一些神奇的方式。

首先, fflush(stdin); 调用未定义的行为 。 不要使用它。

引用C11 ,章节7.21.5.2, fflush函数强调我的

如果stream指向一个输出stream或没有input最近操作的更新stream,则fflush函数会将该stream的任何未写入数据传递到主机环境以写入文件; 否则,行为是不确定的。

这就是说,

 for(j=0;j<n;j++) { fflush(stdin); scanf("%d",&arr[i]); } 

看起来很不对我, arr[i]不能保证在界限内。 它应该是

 scanf("%d",&arr[j]);