【发布时间】:2014-04-07 03:35:27
【问题描述】:
所以我一直在使用这个函数来解决 codechef 问题已经有一段时间了,现在作为整数的快速输入方法。
我的问题是这实际上是如何工作的,什么是 fgetc_unlocked(stdin)(尽管它已被注释),最重要的是我如何优化它以长期运行。
代码如下:
inline void Scan_f(int a)
{
char c = 0;
while(c<33)//shouldn't value of c to compare be less than 9 as digit vary between 0 to 9??
//c = fgetc_unlocked(stdin);
c = getc(stdin);
a = 0;
while(c>33)
{
a = a*10 + c - '0';
//c = fgetc_unlocked(stdin);
c = getc(stdin);
}
【问题讨论】:
-
为什么是
c>33而不是while(c>' ')?为什么char c = 0与int c = 0 -
@chux 谢谢 .. 这解释了其中一个问题。我在代码中编辑了注释,以便对普通读者更有意义。其他问题呢?
-
fgetc_unlocked是getc的线程不安全版本。如果您的程序保证是单线程的,这可能会提供一些性能优势。 -
@AndrewMedico '1' 实际上是 0x31。 33(十进制)是“!”
while()基本上跳过了前导 ASCII 控制和' '字符。整个事情甚至都没有尝试验证输入字符是否在0..9范围内,只是盲目地假设这一点。 -
糟糕,失败。这就是我没有花几秒钟仔细检查 ASCII 表的结果。
标签: c input long-integer long-long large-data