猿问

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;

}

这个解决方案就是针对这个问题。


在第三种情况下,我没有获得所需的输出,根据我放置fflush(stdin)在前面scanf("%d",arr[i])还是后面scanf("%d",arr[i]),它给出的输出为3或4 ,请告诉此代码问题。


繁星coding
浏览 377回答 2
2回答

翻翻过去那场雪

在 没有 一些神奇的方式。首先,fflush(stdin);调用未定义的行为。不要使用它。引用C11,章§7.21.5.2,该fflush函数(重点煤矿)如果stream指向未输入最新操作的输出流或更新流,则该fflush函数会使该流的所有未写入数据都被传递到主机环境中,从而被写入文件中;否则,行为是不确定的。那就是for(j=0;j<n;j++){&nbsp; &nbsp; fflush(stdin);&nbsp; &nbsp; scanf("%d",&arr[i]);}对我来说看起来很不对劲,arr[i]不保证会在范围之内。应该是scanf("%d",&arr[j]);

紫衣仙女

您的网站无法访问google吗?期望您至少自己付出一些努力。如果不是fflush(stdin),则至少是“未定义的行为”!&nbsp;
随时随地看视频慕课网APP
我要回答