快速扫描标准以获取整数不起作用

Fast Scan stdin to get integer not working

本文关键字:获取 整数 不起作用 标准 扫描      更新时间:2023-10-16

我在 c++ 中制作了这个函数,以比cin更快地读取stdin输入,以便在竞争性编程评委中使用。

inline int VReadNumber() {
int n = 0;
int ch = getchar_unlocked();
while(ch >= '0' && ch <= '9') {
n = (n<<3) + (n<<1) + ch - '0';
ch = getchar_unlocked();
}
return n; }

如果所有输入都没有换行符,它会完美运行,例如

2
40 40
80 
5
1 2 3 4 5
10

但是它在输入中的换行符方面效果不佳,例如

2
40 40
80 
5
1 2 3 4 5
10

并且只读取值直到换行符,这里直到80

如何使用换行符使其工作?此外,一个使用示例将不胜感激。

是否值得使用它的所有"细微差别"而不是scanf之类的?

这是因为空行表示两个连续的非数字(n(字符。您的代码只能处理一个。添加另一个循环来使用空格,最好是在函数的开头,并将最后一个非数字字符保留在缓冲区中。