gpt4 book ai didi

c - 回车后执行会跳过循环中的 getchar() 和 putchar()?

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

这是我第一次在这里发帖,希望一切顺利。

我正在做 K&R 的早期练习之一。目标是使用 getchar() 从用户处获取一堆字符,然后使用 putchar() 打印它们,但跳过任何额外的空格。我的练习解决方案效果很好,但我不明白为什么。

这是程序:

#include <stdio.h>

int main()
{
int c, spc;
c = 0;
spc = 0;

while(c != EOF)
{
c = getchar();

if(c == ' ')
{
if(spc != 1)
{
putchar(c);
spc = 1;
}
}
if(c != ' ')
{
spc = 0;
putchar(c);
}
}
return 0;
}

只有一个循环,并且在第一次迭代期间当它按预期命中 getchar() 时停止执行。一旦按下回车键,程序就会继续打印用户在缓冲区中输入的任何内容,没有多余的空格——这正是它应该做的。

但我不明白的是,为什么当遇到 getchar() 时,循环的每次后续迭代都不会停止执行。/n 字符与它有什么关系吗?我确实注意到它还打印换行符,并且在打印完所有内容后,它再次停止在 getchar() 处。那么,为什么它在每次迭代开始时跳过 getchar(),同时打印缓冲区中的所有内容?

我玩 C 语言已经有一段时间了,但直到最近才努力以“正确”的方式学习它。因为我有一些经验,所以你不必把你的答案简化太多(所以,就像你向 10 岁而不是 5 岁的 child 解释一样)。

最佳答案

当您输入内容并按回车键时,所有内容都会存储在内部缓冲区中。因此,每次循环执行时,它都会命中 getchar,后者 ** 会转到该缓冲区并提取单个字符。

But what I don't understand is why execution doesn't stop with each subsequent iteration of the loop

仅当 getchar 在该缓冲区中找不到任何内容时,程序才会停止。现在 \n 在这种情况下没有什么特别的。这只是惯例,CLI 实际上不会将您键入的内容“发送”到程序,直到您按回车键(即您可以按退格键等)。

关于c - 回车后执行会跳过循环中的 getchar() 和 putchar()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30287535/

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