getchar_unlocked()解释

时间:2014-06-12 16:49:17

标签: c ascii getchar

在这个片段中,为什么条件检查ch<'0'|| ch> '9'必要。为什么不能只用if语句就足够了?

   #define getcx getchar_unlocked 
 inline void inp( int &n )
  n=0;
  char ch=getcx();
  int sign=1;

 while( ch < '0' || ch > '9' ) // Why is this while loop essential?
  {if(ch=='-')sign=-1; ch=getcx();}

  while(  ch >= '0' && ch <= '9' )
       n = (n<<3)+(n<<1) + ch-'0', ch=getcx();
  n=n*sign;
  }

函数返回3454为3454,-3454为-3454

1 个答案:

答案 0 :(得分:0)

while循环背后的想法是在前往第一个数字的路上跳过所有非数字字符,只关注破折号。例如,此代码将解释

hello-world123

-123

但更可能的情况是,此代码片段的作者想要跳过空格。这种代码在编程竞赛中很常见,程序员使用安全性较低的getchar_unlocked,以便在读取输入时挤出几微秒。

毋庸置疑,这是一个非常快速和简单的解析器,旨在用于非常干净的数据。