在这个片段中,为什么条件检查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
答案 0 :(得分:0)
while
循环背后的想法是在前往第一个数字的路上跳过所有非数字字符,只关注破折号。例如,此代码将解释
hello-world123
为-123
但更可能的情况是,此代码片段的作者想要跳过空格。这种代码在编程竞赛中很常见,程序员使用安全性较低的getchar_unlocked
,以便在读取输入时挤出几微秒。
毋庸置疑,这是一个非常快速和简单的解析器,旨在用于非常干净的数据。