在win7上,ctrl-d不';不起作用

在win7上,ctrl-d不';不起作用,c,keyboard,cygwin,C,Keyboard,Cygwin,我正在使用Cygwin从书中的Head First C编译C程序。在我的Win 7笔记本电脑上,当我输入程序应该处理的文本时,书中说用Ctrl-d结束字符串列表。嗯,什么也没发生。如果我按Ctrl-c,Cygwin就会关闭。我听说改为使用Ctrl-Z,但这样会打印“Stopped” 我尝试添加一行,将\n替换为\0,因为这是勘误表中问题的答案 如何向程序显示我已完成输入文本?我看到很多关于Ctrl-C的问题,或者如果他们问Ctrl-D,他们想结束这个程序。我想让程序继续运行并结束输入 Cygwi

我正在使用Cygwin从书中的Head First C编译C程序。在我的Win 7笔记本电脑上,当我输入程序应该处理的文本时,书中说用Ctrl-d结束字符串列表。嗯,什么也没发生。如果我按Ctrl-c,Cygwin就会关闭。我听说改为使用Ctrl-Z,但这样会打印“Stopped”

我尝试添加一行,将\n替换为\0,因为这是勘误表中问题的答案

如何向程序显示我已完成输入文本?我看到很多关于Ctrl-C的问题,或者如果他们问Ctrl-D,他们想结束这个程序。我想让程序继续运行并结束输入

Cygwin mintty 1.2-beta1

这是3个文件;这个练习是关于创建自己的头文件

信息隐藏器.c

#include <stdio.h>
#include <string.h>
#include "encrypt.h"

int main() {

    char msg[80];
    while(fgets(msg, 80, stdin)) {
        if(msg[strlen(msg)-1] == '\n')
            msg[strlen(msg)-1] = '\0';
        encrypt(msg);
        printf("%s", msg);
    }
}
加密.h

void encrypt(char * message);

我不知道你是不是因为什么原因和Cygwin在一起。既然您似乎只是在学习C,也许您可以使用一个本机支持Windows的编译器,而不是依赖于Cygwin这样的中间层

有关如何在Windows(GCC的一个端口)上使用TDM-GCC启动和运行的信息,请参见此


顺便说一句,在Windows上,在控制台中插入
EOF
(输入结束信号)是正确的方法。

输入以下语句:

setbuf(stdout, NULL); 
就在
main
函数的左括号之后


这就产生了
stdout
的缓冲。通过这种方式,您应该在输出生成后立即查看输出,它可能会帮助您诊断问题。

这不是正确编码方法的问题。事实上,Control-D不能作为远程桌面或Cygwin minitty的输入因素。我也有同样的问题,并试图找到解决办法


vi中的Control-C和Control-F/Control-B工作正常。因此,我假设由于Windows按键原因而拦截Control-D,这是一个“重复”功能。

Ctrl-Z应该是正确的。您是否在一行上单独输入Ctrl-D?Ctrl-Z停止程序。那不是我想做的。我自己在一行中输入ctrl-d。好吧,在程序的输入循环之后没有任何内容,所以没有其他事情要做就在
main
的左括号之后。这是对标准输出的缓冲,因此您应该在输出后立即看到它。也许它可以帮助你诊断问题。我可以访问一个远程linux帐户,但对于某些事情来说,它不太方便。但这真的很烦人。我有VisualStudio,但这本书的大部分内容都是面向Linux/Unix的。不,那么,TDM-GCC不会在所有与*nix相关的事情上帮你。
setbuf(stdout, NULL);