gpt4 book ai didi

arrays - 为什么程序在没有接受输入的情况下终止?

转载 作者:行者123 更新时间:2023-12-02 16:10:06 24 4
gpt4 key购买 nike

这是我的程序示例:

#include <stdio.h>
void sum();
int main()
{
char choice[4];
do
{
sum();
printf("\nDo You want to restart the program: yes or no:\n");
fgets(choice, 4, stdin); //error point
} while (choice[0] == 'y' || choice[0] == 'Y');
printf("\nThanking You");
return 0;
}
void sum()
{
int a = 3, b = 4;
printf("sum of two number is %d", a + b);
}

在这个程序中,只有在 while 的第一次迭代中,它才会在 choice 中请求输入,并且在下一次迭代中,程序会通过在 choice 中取任何值来自动终止选择

代码执行后的结果如下:

sum of two number is 7
Do You want to restart the program: yes or no:
yes
sum of two number is 7
Do You want to restart the program: yes or no:

Thanking You
[Program finished]

我无法理解它在 choice 中接受输入,而我没有使用 scanf() (它将换行符留在缓冲区中)。可能是它从缓冲区获取输入,可能是空格或其他字符,但我不知道它来自哪里?

最佳答案

您的程序在第一次提示后在输入缓冲区中留下一个换行符,因为缓冲区中没有足够的空间容纳它。

在第一次调用 fgets 时,您输入字符串“yes”,后跟一个换行符。缓冲区的大小为 4,您将该大小传递给 fgets,因此它最多读取那么多字符 - 1 以解释终止空字节。所以缓冲区中仍然有一个换行符。

下次调用 fgets 时会立即读取该换行符。

您应该扩大缓冲区以处理更多字符。

关于arrays - 为什么程序在没有接受输入的情况下终止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68240035/

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