gpt4 book ai didi

缓冲区中的字符阻止整数输入

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

#include <stdio.h>

int main(void) {
int n,m=5;
char c;
while(m>0)
{
m--;
scanf("%d",&n);
if(n==42)
break;
printf("%d",n);
fflush(stdin);
scanf("%c",&c);
puts(&c);
}
return 0;
}

虽然我知道当第一次scanf输入数字后按下回车键时,第二次scanf会将它(enter)作为输入,但我怀疑是这样的,当我给出 5ttttt 作为输入时,输出是

5t
5t
5t
5t
5t

由于输入缓冲区中没有整数,为什么不要求输入整数|第二个问题是,即使我们遵循上述行为,然后输入 5t 然后按 Enter 键应该将两个字符作为缓冲区('t' 和 'enter'),但只接受 t缓冲区和输出是

5t

但我期望输出

5t
5

因为“enter”将被放入缓冲区中,并且它不会在循环的第二次迭代中要求整数输入。

最佳答案

首先,请参阅有关 fflush(stdin); being undefined behaviour 的帖子,干脆不要这样做。

您可以推出自己的函数来完成此任务。沿着线的东西

  while ((c = getchar()) != '\n' && c != EOF) { }

应该很好地完成这项工作。

也就是说,

   puts(&c);  

也导致undefined behavior ,如&c不指向字符串。变量c类型为char ,这不是 char具有强制空终止符的数组需要被视为字符串。因此,由于内存溢出,您实际上是在访问超出范围的内存,从而导致 UB。

您可能想使用 putchar() 相反。

关于缓冲区中的字符阻止整数输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44277437/

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