2013-08-25 123 views
1

我使用Cygwin編譯從書中深入淺出C.在我的Win 7的筆記本電腦的C程序,當我輸入的文本,該方案應該的過程中,本書說用Ctrl-d結束字符串列表。那麼,沒有任何反應。如果我按Ctrl-c,Cygwin會關閉。我聽說用Ctrl-Z代替,但會打印「停止」。cygwin的Win7上,CTRL-d沒有影響

我嘗試添加一行替換\ n與\ 0,因爲這是這個問題的答案是在勘誤表有問題。

如何顯示輸入文本的程序?我看到很多關於Ctrl-C的問題,或者他們詢問Ctrl-D是否想結束程序。我想保持程序運行並結束輸入。

Cygwin的mintty 1.2-β1

這裏的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

Ctrl-Z應該是正確的。 – chris

+0

你是否自己在一行上輸入ctrl-d? – UncleO

+0

Ctrl-Z停止程序。這不是我想要做的。我自己在一行上輸入ctrl-d。 – punstress

回答

1

把下面的語句:

setbuf(stdout, NULL); 

只是你main功能的開括號後。

這原來緩衝的stdout。通過這種方式,您應該在製作完成後立即看到您的輸出,它可以幫助您診斷問題。

1

我不知道,如果你堅持使用Cygwin出於某種原因。既然看起來你只是在學習C,也許你可以使用一個對Windows有原生支持的編譯器,而不是像Cygwin那樣依賴中間層。

看到這個link如何起牀,並與TDM-GCC在Windows上運行(GCC的端口)。

順便提一句,在Windows上CTRL-Z是在控制檯中插入EOF(信號輸入結束)的正確方法。

+0

我可以訪問一個遠程的linux帳戶,但對某些事情來說不太方便。但是這變得非常煩人。 我有Visual Studio,但本書的大部分面向Linux/Unix。 – punstress

+0

@punstress好的。不,那麼,TDM-GCC不會幫助你處理所有* nix相關的東西。 –