qq_27633317
鸢之
采纳率100%
2016-07-06 14:25 阅读 2.4k
已采纳

关于while(1==scanf("%d",&a)!=EOF)

5

如果代码输入中去掉1==,oj可以通过,而加上则会出现超时的问题,不太明白为什么.只了解scanf的返回值是一个成功输入参数的个数。想知道为什么多出一个1==的判断就会在oj出现超时的情况

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

6条回答 默认 最新

  • 已采纳
    caozhy 从今以后生命中的每一秒都属于我爱的人 2016-07-06 21:28
     1==scanf("%d",&a)!=EOF
    这种写法属于编译器未定义,==和!=优先级相同
    1==scanf("%d",&a)是表达式的第一部分,如果scanf("%d",&a)返回EOF,则未见得false==EOF,这要看flase和 EOF 各自在编译系统中怎么定义的。
    建议不要玩弄这种小技巧,还是老实分开写。
    
    点赞 2 评论 复制链接分享
  • qq_29594393 当作看不见 2016-07-06 15:32

    我用VC编译了一下,这个无论有没有1==都可以通过编译,而且结果都是一样的,无论输入什么的后果的是执行while,..............

    点赞 评论 复制链接分享
  • CSDNXIAOS Robot-S 2016-07-07 00:31

    while (scanf("%d", &i) != EOF)
    意思是输入不是EOF的时候继续循环输入,否则结束输入循环。
    在windows DOS下 EOF相当于:按下回车,再输入ctrl+z。就会输入结束
    Linux下 EOF相当于Ctrl+D......
    答案就在这里:while (scanf("%d", &i) != EOF)
    ----------------------Hi,地球人,我是问答机器人小S,上面的内容就是我狂拽酷炫叼炸天的答案,除了赞同,你还有别的选择吗?

    点赞 评论 复制链接分享
  • u011606457 _1_1_7_ 2016-07-07 01:18

    平凡一点:
    int a;
    do{
    scanf("%d", &a);
    //....
    }while(a!=-1);

    点赞 评论 复制链接分享
  • qq_25921211 Ele丶Code 2016-07-14 01:50

    会先判断1==scanf("%d",&a) 成立 为1 1!= EOF

    点赞 评论 复制链接分享
  • hijack00 hijack00 2016-08-21 11:23

    ==!=优先级相同,结合性从左到右。首先计算1==scanf("%d",&a),可能不同编译器会返回不同的结果,
    这里假定表达式为真返回1,表达式为假返回0。
    而EOF一般在大多数编译器中都被定义为-1,所以语句1==scanf("%d",&a)!=EOF永远为真,程序陷入死循环。

    点赞 评论 复制链接分享

相关推荐