我是靠谱客的博主 缥缈硬币,最近开发中收集的这篇文章主要介绍C语言中while语句里使用scanf的技巧,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

今天友人和我讨论了一段代码,是HDU的OJ上一道题目的解,代码如下

#include<stdio.h>
{
    int a,b;
    while(~scanf("%d%d",&a,&b))
    {
        printf("%dn",a+b);
    }
    return 0;
}

起初,我以为代码中while语句里的按位取反运算符写错了,应该是逻辑非运算符。

这时我在Quora上找到了类似的问题,我对其中一篇答案做了修改和翻译:

查阅scanf函数的man手册,关于返回值的说明如下

函数返回按照格式成功匹配并读入的输入项数量,并且可能会返回一个小于输入项总数的数字,而在匹配失败的情况下,甚至可能返回0。

如果在第一次成功读入或者发生匹配错误之前收到输入结束信号,将会返回EOF。在遇到读入错误的时候,也会返回EOF。

在上面的代码里,scanf的返回值可能是0,1,2或者EOF。

对0,1,2进行按位取反得到的都是非零值,此时while循环会继续执行。

在大多数环境里,EOF被定义为值为-1的常量,进行按位取反后得到的值为0.此时while循环将会结束。

综上所述,这个while语句可以不断从输入流读入数据,直到输入流结束,循环也就结束。

值得一提的是,这种用法仅仅在EOF被定义为-1的环境下有效,而且可读性很差。所以应该尽量避免使用它。

在Linux和OS X里,你可以通过Ctrl+D来发送一个输入结束信号,在Windows里你需要使用Ctrl+Z。

 

参考资料:

Quora上的回答

scanf(3)

转载于:https://www.cnblogs.com/nangcr/p/using-scanf-in-a-while-loop.html

最后

以上就是缥缈硬币为你收集整理的C语言中while语句里使用scanf的技巧的全部内容,希望文章能够帮你解决C语言中while语句里使用scanf的技巧所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(59)

评论列表共有 0 条评论

立即
投稿
返回
顶部