繁体   English   中英

getchar_unlocked()解释

[英]getchar_unlocked() explanation

在此代码段中,为什么要检查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返回

while循环背后的想法是跳过到第一位数字的所有非数字字符,只注意破折号。 例如,此代码将解释

hello-world123

作为-123

不过,更可能的情况是该代码片段的作者希望跳过空格。 这种代码在编程竞赛中很常见,在编程竞赛中,程序员使用不太安全的getchar_unlocked以便在读取输入时挤出几微秒的时间。

不用说,这是一个非常快速且肮脏的解析器,旨在用于极其干净的数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM