gpt4 book ai didi

c - 过于频繁地打印文本?

转载 作者:行者123 更新时间:2023-12-05 05:37:08 25 4
gpt4 key购买 nike

我是 c 的新手,之前使用过 python。整个缓冲区溢出的事情真的让我心碎。

#include <stdio.h>

int main(){

char str1[3];
while(true){
scanf("%2s", str1);
printf("test\n");
}
}

这是我为测试语法和 stdio 库而编写的一小段代码。当程序根据我输入的字符数多次输出“test”时,我真的很惊讶。因此,例如,当我输入两个字符时,它会打印两次“test”。谁能告诉我为什么会这样,我该如何解决?

最佳答案

您可以通过如下修改代码来弄清楚会发生什么:

#include <stdio.h>

int main(){

char str1[3];
while( 1 ){
scanf("%2s", str1);
printf("test: %s\n", str1);
}
}

它只是打印 str1 的内容以及“test”字符串。以下是输入字符串 1234567 的示例输出:

1234567
test: 12
test: 34
test: 56
test: 7

scanf("%2s", str1); 语句从 stdin 中读取两个字符并将它们分配给 str1。读取的字符从输入流中“弹出”,即它们被删除。如果 stdin 恰好包含更多字符,则多余的字符将保持不变。因此,对于给定的输入,当返回第一个 scanf 时,str1 包含 12\0,而 stdin 包含 34567

由于它们在无限循环中,代码重复,scanf 再次被调用,再次从 stdin 读取前两个字符,只有这次找到 34.

然后重复该过程,直到 stdin 上没有剩余字符,然后 scanf 等待用户输入,这大概正如您所期望的那样。

基本上,scanf 会继续读取而不是等待用户输入,因为 stdin 已经包含要读取的内容。

So for example, when I entered two characters, it printed "test" two times.

另一方面,这没有意义,因为它应该打印 N/2 次“test”,四舍五入,其中 N 是您输入的字符数。


对于“解决此问题”,我没有太多建议,因为您并不清楚您的期望。但是如果你想去掉 stdin 中剩余的字符,你可以检查 this

关于c - 过于频繁地打印文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73177885/

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