我写过这个函数:
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” 这个功能有时是有效的,有时候不行,我是K.O.,我不能忍受一个非确定性的行为,这可能是什么问题(可能是一个bug)?
答案 0 :(得分:1)
我运行了你的代码几次,我只得到正确的输出,所以我无法重现问题。我认为我知道问题是什么。试着打电话
flush(stdin);
在您致电输入之前。