gpt4 book ai didi

c - Linux 非确定性行为接受输入

转载 作者:太空宇宙 更新时间:2023-11-03 23:54:44 26 4
gpt4 key购买 nike

我写了这个函数:

char* input(char* buffer, FILE* fp)
{
char* result=fgets(buffer,LMAX,fp);
if(result!=NULL)
{
const unsigned int length=strlen(buffer);
if(buffer[length-1]=='\n')
buffer[length-1]='\0';
}
return result;
}

如果 fp 等于标准输入,它只接受输入一行文本。
我已经用了很多次了,效果很好。
我只是在 fp 是一个 FILE 指针的情况下获取 fgets 的结果,所以我必须检查结果是否不为 NULL,以防流不适合输入操作。
问题是如果我这样使用它:

char buffer[LMAX];  // LMAX = 100, defined constant
input(buffer,stdin);
puts(buffer);

如果输入类似于“#dest :a”,那么 puts 会打印“#dest”,截断字符串的其余部分。最大的问题是如果我在一小时前这个函数是有效的(它是相同的)确实输入了一个像“#dest :a”这样的字符串,puts 正在打印“#dest :a”。没有任何改变。另外,如果我尝试调试并写下这个:

char* input(char* buffer, FILE* fp)
{
char* result=fgets(buffer,LMAX,fp);
puts(buffer); //prints always "#dest :a"
if(result!=NULL)
{
const unsigned int length=strlen(buffer);
if(buffer[length-1]=='\n')
buffer[length-1]='\0';
}
return result;
}

问题在于它在函数中打印“#dest :a”。
此功能有时有效,有时无效,我是 K.O.,我无法忍受不确定的行为,这个问题(可能是错误)可能是由于什么原因造成的?

最佳答案

我多次运行您的代码,除了正确的输出之外什么也没有得到,所以我无法重现该问题。我确实认为我知道问题是什么。试试打电话

    flush(stdin);

在你调用 input 之前。

关于c - Linux 非确定性行为接受输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10796933/

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