我必须接受用户输入并将其写入文件,我正在使用fgets()
来防止溢出:
while (fgets( line, sizeof line, stdin) != NULL)
fputs(line, file);
这个问题是用户必须在空行上输入CTRL + Z然后提交它以退出输入,这可能看起来有点令人困惑。是否有更简单的方法退出fgets()
输入?
其他方法怎么样?如果我逐个符号地读取,我可以实现一个退出字符,但是用户不能删除输入,这也令人困惑,所以我必须实现删除算法,这会给代码增加一点太多的复杂性。
编辑: 用户必须能够在尽可能少的限制下在终端中输入C代码。
答案 0 :(得分:2)
为什么不使用输入值本身来实现检查?这样,您就不需要任何特殊实现来标记输入的结束。
详细说明,如果要使用空行标记输入的结尾,可以检查输入缓冲区的第一个元素是否等于换行符以实现break
条件,如
while (fgets( line, sizeof line, stdin) != NULL)
{
if (line[0] == '\n')
{
printf("end\n");
break;
}
fputs(line, file);
}
编辑:如果您想要实现自己的输入结束标记,可以使用该特定标记与第一个元素进行比较(或者,如果它是一个多字母标记,可能是strcmp()
输入)来实现break
。