[英]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.