问题描述
#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;
}
此解决方案适用于此问题.
在第三种情况下,我没有获得所需的输出,根据我将fflush(stdin)
放在scanf("%d",arr[i])
之前还是scanf("%d",arr[i])
之后,它给出的输出为3或4,请将此代码告诉问题./p>
I am not getting the desired output for the third case , it's giving me output as 3 or 4 depending on whether I place fflush(stdin)
before scanf("%d",arr[i])
or after scanf("%d",arr[i])
, please tell the problem with this code .
推荐答案
以 一种神奇的方式.
首先,fflush(stdin);
调用未定义行为. 请勿使用.
First of all, fflush(stdin);
invokes undefined behavior. Don't use that.
引用C11
,第§7.21.5.2章, fflush
函数(强调我的)
Quoting C11
, chapter §7.21.5.2, The fflush
function (emphasis mine)
那是
for(j=0;j<n;j++)
{
fflush(stdin);
scanf("%d",&arr[i]);
}
对我来说似乎很不对劲,arr[i]
不能保证在范围之内.应该是
looks pretty wrong to me, arr[i]
is not guaranteed to be within bounds. It should rather be
scanf("%d",&arr[j]);
这篇关于fflush(stdin)的工作如何更改以下代码中的输出?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!