EOF无效的布尔表达式

时间:2014-11-14 20:40:51

标签: c eclipse eof

我尝试编写一个代码片段,让用户输入无限(仅受内存限制)数量的字符串,其中每个字符串最多可达298个字符长度(298个数组,其中一个字符串为' \ n&# 39;和' \ 0'最后)。 结束信号应该是EOF(Win上的Strg + Z,Linux上的Stg + D)。当我将EOF更改为' a'或任何其他char,但不与EOF。我很想调试它,但不幸的是我无法在eclipse中将EOF放入我的终端。 那么有谁知道为什么EOF(应该是-1)和char之间的区别或者如何在eclipse中放入EOF?

while(boolean == 0)
{
fgets(buff_memory, 300, stdin);

for (i = 0; i < 300; i++)
{
  if (buff_memory[i] == EOF)
   {
    all_memory[current_max - 1] = '\0';
    boolean = 1;
    break;
   }
  else if (buff_memory[i] == '\0')
  {
    break;
  }
  else
  {
    all_memory[current_max - 1] = buff_memory[i];
    buff_memory[i] = '\0';
    current_max++;
    all_memory = (char *)realloc(all_memory, current_max * sizeof(*all_memory));
  }
}

3 个答案:

答案 0 :(得分:1)

feof永远不会在其输出中放置EOFEOF的值为int -1,无法在char数组中表示。 EOF仅由getc和类似函数返回。

在文件结束时,fgets在到达文件结尾时将返回NULL,您需要检查feof以验证是否已达到EOF。

答案 1 :(得分:0)

如果你按ctrl + space,你能在Eclipse的自动完成列表中看到EOF吗?顺便说一句,你的EOF可能与Eclipse无关。您的EOF被评估为&#39; -1&#39;它不是char。 Eclipse再次与EOF无关。它是一个IDE,它会按照你的要求做 - 毕竟是由人做的。

阅读本文以获取进一步的说明 - http://faq.cprogramming.com/cgi-bin/smartfaq.cgi?answer=1048865140&id=1043284351

答案 2 :(得分:0)

我找到了一个适合我的问题的解决方案。有了它,我可以在一行的开头检测到EOF,但不能在中间或最后检测到。以下是我将使用的代码:

while (1)
{
fgets(buff_memory, 300, stdin);

if (buff_memory[0] == '\0')
{
  break;
}
else
{
  for (i = 0; i < 300; i++)
  {
    if (buff_memory[i] == '\0')
    {
      break;
    }
    else
    {
      all_memory[current_max - 1] = buff_memory[i];
      buff_memory[i] = '\0';
      current_max++;
      all_memory = (char *) realloc(all_memory, current_max * sizeof(*all_memory));
    }
  }
}