win7上的cygwin,ctrl-d没有效果

时间:2013-08-25 20:12:24

标签: c keyboard cygwin

我正在使用Cygwin从Head First C这本书中编译C程序。在我的Win 7笔记本电脑上,当我输入程序应该处理的文本时,本书说要用Ctrl-d结束字符串列表。好吧,没有任何反应。如果我按下Ctrl-c,Cygwin就会关闭。我听说使用Ctrl-Z,但会打印“已停止。”

我尝试添加一行用\ 0取代\ n,因为这是勘误表中问题的答案。

如何显示我输入文字的程序?我看到很多关于Ctrl-C的问题,或者如果他们询问Ctrl-D,他们想要结束程序。我想保持程序运行,只是结束输入。

Cygwin mintty 1.2-beta1

这是3个文件;练习是关于制作自己的头文件。

message_hider.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);
    }
}

encrypt.c

#include "encrypt.h"


void encrypt(char * message) {

    char c;
    while (*message) {
        *message = *message ^ 31;
        message++;
    }
}

encrypt.h

void encrypt(char * message);

3 个答案:

答案 0 :(得分:1)

我不知道你是否因为某些原因而被Cygwin困住了。由于您似乎只是学习C,也许您可​​以使用对Windows具有本机支持的编译器,而不是依赖于Cygwin的中间层。

有关如何在Windows(GCC端口)上启动和运行TDM-GCC,请参阅此link

BTW,在Windows CTRL-Z上是在控制台中插入EOF(信号输入结束)的正确方法。

答案 1 :(得分:1)

提出以下声明:

setbuf(stdout, NULL); 

main函数的左大括号之后。

这为stdout提供了缓冲。通过这种方式,您应该在产生输出后立即看到输出,它可以帮助您诊断问题。

答案 2 :(得分:0)

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

vi中的Control-C和Control-F / Control-B正常运行。因此,我假设Windows按键击中了Control-D,这是“重复”功能。