getchar和EOF C编程

时间:2015-09-23 10:04:42

标签: c windows eof getchar

#include <stdio.h>
int main() {
int c;
while ((c = getchar()) != EOF) {
    putchar(c);
    }
}

当EOF(ctrl + z)处于新行时,但输入时,此工作正常 是:
blabla ^ z
它不起作用。 当我调试程序时,它告诉我输入“^ z”(^ z = EOF)保存为26,
但是当输入^ z在新行中时,它将保存为-1。 为什么?
如果有什么不清楚的话:
它被保存在变量c中,并且不起作用意味着它不会终止while循环,只有当输入^ z被放入一个新行时它才会撕掉循环
即时通讯使用Windows

1 个答案:

答案 0 :(得分:0)

也许你使用它错了,CTRL + z符号不会发送到getchar()函数(它会给出一个EOF),而是发送给你运行程序的系统(例如它会“停止”程序)。

尝试

<ItemsControl x:Class="MyItemsControl">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <!-- Arrange all items vertically, distribute the space evenly -->
            <UniformGrid Columns="1"/>
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <!-- Templates and other stuff ... -->
</ItemsControl>

在任何情况下你都看到输出'W'吗? (在我的情况下,特别是当使用新的线?)时,我得到“停止”(在UNix系统上,CTRL+Z is used to suspend a process)。

On Windows system, the answer has already been given on SO

  

在一行结束时,点击^ z(或linux上的^ d)不会导致   终端驱动程序发送EOF。它只会让你冲洗缓冲区   过程(没有\ n)。

     

在行的开头按^ z(或linux上的^ d)解释   终端为“我想发出EOF信号”。