How is the working of fflush(stdin) changing the output in below code?

半城伤御伤魂 提交于 2019-11-26 02:59:39

问题


#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;
}

This solution is to this problem.

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 .


回答1:


In no some magical way.

First of all, fflush(stdin); invokes undefined behavior. Don't use that.

Quoting C11, chapter §7.21.5.2, The fflush function (emphasis mine)

If stream points to an output stream or an update stream in which the most recent operation was not input, the fflush function causes any unwritten data for that stream to be delivered to the host environment to be written to the file; otherwise, the behavior is undefined.

That said,

for(j=0;j<n;j++)
{
    fflush(stdin);
    scanf("%d",&arr[i]);
}

looks pretty wrong to me, arr[i] is not guaranteed to be within bounds. It should rather be

scanf("%d",&arr[j]);


来源:https://stackoverflow.com/questions/38325884/how-is-the-working-of-fflushstdin-changing-the-output-in-below-code

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!