我正在使用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);
答案 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,这是“重复”功能。