gpt4 book ai didi

c - getchar_unlocked() 如何工作?

转载 作者:行者123 更新时间:2023-11-30 19:17:06 27 4
gpt4 key购买 nike

我的问题基于名为 Lucky Four 的 CodeChef 问题.

这是我的代码:

int count_four() {
int count = 0;
char c = getchar_unlocked();
while (c < '0' || c > '9')
c = getchar_unlocked();
while (c >= '0' && c <= '9') {
if (c == '4')
++count;
c = getchar_unlocked();
}
return count;
}

int main() {
int i, tc;
scanf("%d", &tc);
for (i = 0; i < tc; ++i) {
printf("%d\n", count_four());
}
return 0;
}

假设我对 count_four() 进行了轻微更改:

int count_four() {
int count = 0;
char c = getchar_unlocked();
while (c >= '0' && c <= '9') {
if (c == '4')
++count;
c = getchar_unlocked();
}
while (c < '0' || c > '9') // I moved this `while` loop
c = getchar_unlocked();
return count;
}

这是将 while 循环移至另一个循环下方后的输出:

0
3
0
1
0

而不是:

4
0
1
1
0

用于测试程序的输入:

5
447474
228
6664
40
81

为什么会发生这种情况? getchar()getchar_unlocked() 如何工作?

最佳答案

getchar_unlocked 只是一个较低级别的函数,用于从流中读取字节而不锁定它。在单线程程序中,它的行为与getchar()完全相同。

您对 count_four 函数的更改完全改变了它的行为。

原始函数读取标准输入。它跳过非数字,导致文件末尾无限循环。然后它对数字进行计数,直到得到 '4'。返回计数。

您的版本读取输入,它会跳过数字,计算 '4' 的出现次数,然后跳过非数字,在 EOF 上存在相同的错误,最后返回计数。

关于c - getchar_unlocked() 如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28662687/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com