2

我写了这个函数:

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 等于 stdin,它只会输入一行文本。
我已经用过很多次了,而且效果很好。
我只在 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”。
此功能有时有效,有时无效,我是 KO,我无法忍受非确定性行为,这个问题(可能是错误)可能是由什么引起的?

4

1 回答 1

1

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

    flush(stdin);

在您调用输入之前。

于 2012-05-29T16:04:08.017 回答