为什么循环没有被终止?

时间:2017-01-04 06:37:42

标签: c

int main()
{
    int c;
    c = getchar();
    while (c!=EOF){
        putchar(c);
        c=getchar();
    }
    return 0;
}

在上面的代码中,当我输入值-1时为什么循环没有被终止   我从这段代码得到的EOF = -1值

main()
{
    printf("EOF is %d\n",EOF);
}
当我使用 Ctrl + D 时,

代码被终止,有没有其他方法可以在不使用 Ctrl + d

2 个答案:

答案 0 :(得分:8)

因为在控制台上输入-1并不会生成EOF。相反,getchar()会将其视为两个单独的字符'-''1'

如果你想用-1输入终止它,那么你必须跟踪两个字符并比较它们以退出循环而不是与EOF进行比较。但这实际上并不等同于生成EOF。

终止的另一个选项是通过控制台中的输入重定向<将标准输入重定向到文件。当输入文件的读数结束时,它将发出EOF信号。

答案 1 :(得分:1)

如果你想在不按ctrl + D的情况下循环出代码,那么有多种方法可以实现。我将向您展示使用基本if条件执行此操作的最简单,最低效的方法。仔细阅读代码,如果您有任何疑问,请随时对其进行评论。

#include<stdio.h>
#include<stdlib.h>

int main()
{
int c;
c = getchar();
while ((c != EOF))
{
    if (c == 'i')
        break;
    putchar(c);
    c = getchar();

}
return 0;
}