#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;
}
Run Code Online (Sandbox Code Playgroud)
该解决方案是这一问题.
我没有得到第三种情况所需的输出,它给我的输出为3或4,取决于我放在fflush(stdin)之前scanf("%d",arr[i])或之后scanf("%d",arr[i]),请用这段代码告诉问题.
在 没有 一些神奇的方式.
首先,fflush(stdin);调用未定义的行为.不要使用它.
引用C11,章§7.21.5.2,该fflush函数(重点煤矿)
如果
stream指向输入流或未输入最近操作的更新流,则该fflush函数会将该流的任何未写入数据传送到主机环境以写入该文件; 否则,行为未定义.
那说,
for(j=0;j<n;j++)
{
fflush(stdin);
scanf("%d",&arr[i]);
}
Run Code Online (Sandbox Code Playgroud)
对我来说看起来arr[i]很不对,并不能保证在一定范围内.它应该是
scanf("%d",&arr[j]);
Run Code Online (Sandbox Code Playgroud)