- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的问题基于名为 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/
getchar_unlocked() 的内部工作原理是什么? 为什么线程不安全? 为什么它没有在 Windows POSIX 中使用? 最佳答案 getchar_unlocked() 不是线程安全的,
我的问题基于名为 Lucky Four 的 CodeChef 问题. 这是我的代码: int count_four() { int count = 0; char c = getchar_un
在这个片段中,为什么条件检查是否 ch '9' 必要。为什么不能仅使用 if 语句? #define getcx getchar_unlocked inline void inp( int &
此代码片段来自 CodeChef 中成功提交的名为 ART 的问题,为了提高速度,编码器使用 getchar_unlocked 来读取整数。但我不明白它是如何在下面的代码片段中跳出循环的?请问有人可以
这是我计算编号的代码。次 A[i]>B[j] 这样,我 #include using namespace std; int main() { int n,c=0,j=1,i; ci
我知道这段代码是如何工作的,但我找不到为什么这段代码比其他输入/输出方法更快??? int read_int() { char c = getchar_unlocked(); while(c'
我了解到使用 getchar_unlocked 是读取输入的快速方法。我在很多地方看到了代码,但无法理解。任何人都可以帮助我了解如何使用 getchar_unlocked 阅读吗?提前致谢。 void
我正在尝试解决一个 codechef 练习题 subtraction game 1使用 C 编程和代码块作为 IDE。我找到了一种比 scanf() 函数更快地读取输入的方法,但是当我运行我的程序时,
使用 getchar_unlocked 并使用 --std=c99 标志进行编译会给出如下警告- warning: implicit declaration of function ‘getchar_
这是我的代码: #include void scan(int* i) { int t=0; char c; bool negative=false; c=getcha
我正在做一个项目来证明 std::cin 比 scanf 接受输入慢,而 scanf 又比通过使用 getchar/getchar_unlocked() 等自写函数。 我想记录并打印每种情况下的执行时
这三个输入函数在编程语言中有什么区别。他们的输入方式是否不同? 1.getchar_unlocked() #define getcx getchar_unlocked inline void in
这个问题在这里已经有了答案: getchar_unlocked( ) VS scanf() VS cin (2 个答案) 关闭 8 年前。 我最近了解到 getchar_unlocked() 比正常
在 read() 函数中,当我使用 getchar() 时,它只读取一个字符。即使 while() 中的条件为真但 getchar_unlocked() 读取字符直到给定条件失败,它也会中断循环代码是
在 codechef 上用于更快输入输出的许多解决方案中,我遇到过这个表达式,但我无法理解它,因为我没有很多经验。 inline int scan( ) { int n=0; int ch=getch
我是一名优秀的程序员,十分优秀!