zoukankan      html  css  js  c++  java
  • C/C++输入那点小事

    “测试输入包含若干测试实例。当N为0时,输入结束,该实例不被处理。”这句话是最早我对ACM的印象,以前也没见过这种输入要求,做第一道题的时候就卡住了,上网看别人的代码 都有一句:

    while(scanf("%d",&n)!=EOF);

    "scanf 函数还能放while里啊... EOF是什么..."。上网找答案吧 也没人可问...有人说EOF等于-1,其实就是scanf函数的返回值,不等于-1时,继续进行循环;有人说 EOF是处理到文件结束 不用EOF也可以....很多天后终于把这个弄明白了scanf的返回值由后面的参数决定:

    scanf("%d%d", &a, &b);

    如果a和b都被成功读入,那么scanf的返回值就是2;如果只有a被成功读入,返回值为1;如果a和b都未被成功读入,返回值为0;如果遇到错误或遇到end of file,返回值为EOF。且返回值为int型。验证:

    sign=scanf("%d %d",&a,&b); 
    printf("%d %d\n",a,b); 
    printf("%d\n",sign);

    但是输入“a X”的时候 输出的sign为0,什么时候输出EOF? 在stdio.h中 宏定义为-1。按照说明,scanf函数只有在第一个参数为NULL(空指针)的情况下,才可能返回EOF,否则,返回成功格式化并赋值的参数个数(>=0)。End Of File,在电脑的术语缩写通常为 EOF,在作业系统决定资料源无更多的资料可读取。

    当时这个程序就是这么写的:

    while(scanf("%d",&n)!=EOF)
    {
         if(n==0)
         {
              break;
         }
    } 

    终于把那道题给AC了...后来看别人的代码,又这么写了:

    while(scanf("%d",&n)&&n!=0);

    后来:

    whlie(scanf("%d",&n)&&n);

    再后来:

    while(scanf("%d",&n),n);

    ...

    也许用C语言,用scanf函数,这么写是最简单的吧...

    同样,C++中输入更简单cin>>a;即可搞定,三种写法(原理同上):

    while(cin>>a&&a!=0);
    while(cin>>a&&a);
    while(cin>>a,a);

    欧拉...

  • 相关阅读:
    Spring缓存注解@Cacheable、@CacheEvict、@CachePut使用
    分布式架构2:Nginx下Session存储
    分布式架构3:MySQL集群(Mysql Cluster7.5.5)
    分布式架构1:Nginx实现负载均衡
    Oracle 触发器记录
    [Deprecation Notice] 本博客弃用, 迁移至新博客
    KM算法 O(n^3)最大权完美匹配
    Python 学习笔记(附 Pytorch)
    你一定看的懂的:vlan与交换机端口的三种模式access,trunk和hybrid
    Git代码回滚
  • 原文地址:https://www.cnblogs.com/sooner/p/2454496.html
Copyright © 2011-2022 走看看