1

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

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

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

Cygwin 薄荷 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);
    }
}

加密.c

#include "encrypt.h"


void encrypt(char * message) {

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

加密.h

void encrypt(char * message);
4

3 回答 3

1

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

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

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

于 2013-08-25T20:27:51.700 回答
1

放置以下语句:

setbuf(stdout, NULL); 

就在函数的左大括号之后main

结果是缓冲stdout. 通过这种方式,您应该在生成输出后立即看到它,它可以帮助您诊断问题。

于 2013-08-25T22:59:01.277 回答
0

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

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

于 2020-10-19T17:15:08.290 回答