2012-08-17 74 views
1

我编写了一个程序来通过异或来加密给定的消息。它有效,但它不会结束。下面是代码(我已创建3个文件)。Ctrl + D不会停止应用程序在命令窗口中执行

encrypt.h:

void encrypt(char *message); 

message_hider.c:

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

int main() { 
    char msg[80]; 

    while (fgets(msg, 80, stdin)){ 
    encrypt(msg); 
    printf("%s", msg); 
    } 

    return 0; 
} 

encrypt.c:

#include "encrypt.h" 

void encrypt(char *message) { 
    while (*message) { 
    *message++ ^= 0x1f; 
    } 
} 

正如我上面提到的,它的工作原理。但我无法阻止它。当我按Ctrl + D来停止它(以cmd为单位)时,它也会对它进行加密(我在加密消息后需要停止该代码)。请给我解释一下这个案子。

+0

正如你写的那样,你能解释一下你期望这段代码停止什么情况吗? – BugFinder 2012-08-17 07:55:30

+0

cmd不理解Ctrl + D,使用文件结束条件(即写一个文件并给它到你的程序的标准输入:'prog <文件')。你不加密,你混淆(一点)。顺便说一句,不要指望printf能够实际显示混淆文本 – fork0 2012-08-17 07:57:10

+0

你使用一个更糟糕的主题,请将其修改为有意义的。 – 2012-08-17 08:02:15

回答

2

isprint()可以帮助:

#include <stdio.h> 
#include <ctype.h> 

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

int main(void) 
{ 
    char msg[80]; 

    while (fgets(msg, 80, stdin) != NULL) { 
     if (!isprint((unsigned char)*msg)) break; 
     encrypt(msg); 
     printf("%s", msg); 
    } 
    return 0; 
} 
+0

谢谢你这是工作... – 0xEDD1E 2012-08-18 14:06:23

5

当我按下Ctrl键+ d停止它(在CMD)

如果这是从Windows cmd你可能想Ctrl+Z

+0

感谢您的帮助 – 0xEDD1E 2012-08-18 14:07:00

4

Ctrl-D用于Unix系统上的控制台EOF。

Ctrl-Z用于Windows系统上的控制台EOF。

+0

按下Ctrl-Z +在Windows上输入cmd.exe。 – Doomjunky 2017-08-01 14:37:26

1

添加退出条件:

if(c < 0x20) break; 

您可能还需要增加其他检查,以支持回退不实施编码吧...

http://www.asciitable.com/

0

刚跑

$> kill -l 

查看Linux中的信号列表。您不会在这里找到SIGKILL(Ctrl + D)信号:(

Ctrl + D是Linux中的SIGKILL(0)信号,它没有记录在任何地方 Ctrl + Z用于Windows,它告诉EOF我们需要按“Enter”关闭

+0

这是不正确的。 Ctrl-D不会导致在unix上发送信号。 SIGKILL通常是信号9,而不是0.值0没有分配标准名称。 – Kenster 2015-08-25 12:52:59

相关问题