#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;
}
此解决方案适用于此problem。
我没有得到第三种情况所需的输出,它给我的输出为3或4,具体取决于我是fflush(stdin)
之前还是scanf("%d",arr[i])
之后,请告诉我这段代码存在问题。
答案 0 :(得分:5)
在 no 一些神奇的方式。
首先,fflush(stdin);
调用undefined behavior。 不要使用它。
引用C11
,章节§7.21.5.2, fflush
函数(强调我的)
如果
stream
指向输出流或最新的输出流 如果没有输入操作,fflush
函数会导致该流的任何未写入数据 要传递到主机环境以写入文件; 否则,行为是 未定义。强>
那就是说,
for(j=0;j<n;j++)
{
fflush(stdin);
scanf("%d",&arr[i]);
}
对我来说看起来很不对,arr[i]
不能保证在范围内。它应该是
scanf("%d",&arr[j]);