gpt4 book ai didi

C - 当输入超过 fgets 容限时程序退出

转载 作者:太空宇宙 更新时间:2023-11-04 02:11:25 25 4
gpt4 key购买 nike

我有以下用 C 编写的程序:

这个程序的主要问题是,如果在使用 fgets() 函数时输入超过 80 个字符,程序会立即退出。其他代码被执行,但它不会等待用户按下回车键。它就像简单地忽略最后的 getchar。

请问我该如何解决这个问题?

最佳答案

如果用户输入的长度超过 fgets 可能从 stdin 读取的 79 个字符(它最多可以读取比其 size 参数少一个字符,因为它是 0 - 终止缓冲区),剩余的输入留在输入缓冲区中,因此最后的 getchar() 立即成功。

为避免这种情况,如果输入太长,您需要清除输入缓冲区。

问题是如果输入足够短,你不知道是否清除缓冲区。因此,请检查您是否真的通过 fgets

读入了一个换行符,

int len = strlen(password);
if (password[len-1] == '\n') {
// got a newline, all input read, overwrite newline
password[len-1] = 0;
} else {
// no newline, input too long, clear buffer
int ch;
while ((ch = getchar()) != EOF && ch != '\n');
if (ch == EOF) {
// input error, stdin closed or corrupted, what now?
}
}

关于C - 当输入超过 fgets 容限时程序退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13532626/

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