为了账号安全,请及时绑定邮箱和手机立即绑定

fflush(stdin)的工作如何更改以下代码中的输出?

fflush(stdin)的工作如何更改以下代码中的输出?

C
繁星coding 2019-11-04 14:13:52
#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 ,请告诉此代码问题。
查看完整描述

2 回答

?
翻翻过去那场雪

TA贡献2065条经验 获得超14个赞

在 没有 一些神奇的方式。


首先,fflush(stdin);调用未定义的行为。不要使用它。


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


查看完整回答
反对 回复 2019-11-04
?
紫衣仙女

TA贡献1839条经验 获得超15个赞

您的网站无法访问google吗?期望您至少自己付出一些努力。如果不是fflush(stdin),则至少是“未定义的行为”! 

查看完整回答
反对 回复 2019-11-04
  • 2 回答
  • 0 关注
  • 376 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信