【问题标题】:How is the working of fflush(stdin) changing the output in below code?fflush(stdin) 如何更改以下代码中的输出?
【发布时间】:2016-11-14 12:26:56
【问题描述】:
#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]) 之前还是在 scanf("%d",arr[i]) 之后,请用这段代码说明问题。

【问题讨论】:

  • 看起来很有趣,但是请:正确格式化您的代码。
  • 我重新提出这个问题,因为标记的欺骗非常相关,但不是正确的欺骗。除了标记为欺骗中讨论的问题外,还有其他问题需要解决。
  • 供参考:被标记的骗子:stackoverflow.com/questions/22901901/…

标签: c fflush


【解决方案1】:

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]);

【讨论】:

  • 是的,我只是错过了这一点,谢谢,但是您提到的关于 fflush(stdin) 的未定义行为,我无法正确关联,请您再次解释一下
  • @RADHAGOGIA:您的网站是否无法访问 Google?你应该至少表现出自己的一些努力。如果不是fflush(stdin),至少对于“未定义的行为”!
  • @RADHAGOGIA 你不明白哪一部分?它只是说,将fflush 与与输出关联的流一起使用,例如stdout。不要在输入流上使用它,例如 stdin
猜你喜欢
  • 2021-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-24
  • 2015-08-20
相关资源
最近更新 更多