我尝试编写一个代码片段,让用户输入无限(仅受内存限制)数量的字符串,其中每个字符串最多可达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));
}
}
答案 0 :(得分:1)
feof
永远不会在其输出中放置EOF
。 EOF
的值为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));
}
}
}