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]);