2015-12-16 60 views
1

我必须接受用户的输入,并将其写入到文件中,我使用fgets()的想法,以防止溢出,其中:用户输入和与fgets

while (fgets(line, sizeof line, stdin) != NULL) 
    fputs(line, file); 

这样做的问题是,用户有在空行输入CTRL + Z,然后提交它以退出输入,这可能看起来有点混乱。有没有更简单的方法来退出fgets()输入?

其他方法呢?如果我用符号读取符号,我可以实现一个退出字符,但用户不能删除输入,这也是令人困惑的,所以我必须实施删除算法,这会增加代码的复杂度。

编辑: 用户必须能够在尽可能少的限制下在终端中输入C代码。

+0

像Linux上的字符一样工作。也许你有一些奇怪的IDE或OS?而'fgets'不允许编辑。 'stdin'是一个字符流! – Olaf

+0

这个想法是能够很容易地退出输入(可能是一个特定的退出字符),我不能用fgets来做到这一点。 – user3604097

回答

2

为什么不使用输入值本身来执行检查?这样,您将不需要任何特殊实现来标记输入的结束。

要细说,如果你想使用一个空行标记输入的结束,您可以检查输入缓冲区的第一个元素是等于换行来实现break条件,如

while (fgets(line, sizeof line, stdin) != NULL) 
    { 
      if (line[0] == '\n') 
      { 
        printf("end\n"); 
        break; 
      } 
       fputs(line, file); 
    } 

编辑:如果你想实现自己最终的输入标记,你可以使用特定的标记来比较的第一个元素(或者,如果它是一个多字母的标志,也许strcmp()与输入)实施break

+0

这不允许空行,用户可能希望有一个空行。 – user3604097

+0

@ user3604097我没有注意到,作为您的要求的一部分。 –

+0

我忘了提及它,但总体思路是让用户能够在终端窗口中输入C代码。 – user3604097