我正在尝试使用c编程和代码块作为IDE解决一个codechef练习问题subtraction game 1。我找到了一种比scanf()函数更快地读取输入的方法,但是当我运行程序时,我收到错误“未定义引用'getchar_unlocked'错误”。你能告诉我我做错了什么,还有其他方法可以更快地阅读输入吗?
#include<stdio.h>
inline int fastread()
{
int noRead=0;
char p=getchar_unlocked();
for(; p<33;) {
p=getchar_unlocked();
};
while(p>32) {
noRead = (noRead << 3) + (noRead << 1) + (p - '0');
p=getchar_unlocked();
}
return noRead;
};
unsigned int gcd(unsigned int a, unsigned int b)
{
if (b == 0)
return a;
else
return gcd(b, a % b);
}
int main()
{
int t,i,answer=0;
unsigned int n;
t = fastread();
while(t--)
{
n = fastread();
unsigned int a[n];
for(i=0;i<n;i++)
a[i]=fastread();
answer = gcd(a[0],a[1]);
for(i=2;i<n;i++)
answer = gcd(a[i],answer);
printf("%u\n",answer);
}
return 0;
}
答案 0 :(得分:2)
在SO
上引用this回答在Windows中不推荐使用getchar_unlocked,因为它是线程不安全的 getchar()的版本。
getchar_unlocked与scanf或cin相比具有更少的开销,不是c或c ++的标准功能,您可以在此处始终使用getchar()。
或者你可以编写一个函数getchar_unlocked()来返回getchar()的值,以便在机器测试中使用它,如果你必须在你的在线问题中使用它。