C 语言 EOF和文件读写及终止输入

我在C Primer Plus中看到这样一个例子用于终止输入的方法:

#include <stdio.h>

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

在这个地方使用的是EOF来终止,一般EOF是用于文件读写结尾的返回,end of file,
因为EOF的值是-1,而在标准字符集中没有-1对应的值,所以可以用其来现实文件的结尾。在大多数系统中有具有一种从键盘模拟文件结尾的方法。所以这个地方使用了
EOF作为输入结尾的标志
问题来了:我们在键盘中不能输入-1,那么程序是如何读取到的这个EOF,从而终止输入的呢?怎么上面这个程序能够有效的实现最终的这个输入终止呢?
我在windows平台上运行这个程序,由于没办法输入-1,所以没办法终止程序,在linux上键入Ctrl+Z(Ctrl+Z在一些系统中可以作为文件结尾的标志)
然后linux现实的是如下的样子图片说明
求大神指点

截图第二行就是运行程序之后随便输入的字符^Z就是按了Ctrl+Z的显示,按完之后得到第三行的数据

windows用的是ctrl+d

我错了,dc++也是ctrl+z图片说明这里就终止了,没有光标了

我不管ctrl z还是Ctrl d都没用