Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用ctrl+;结束凯撒密码_C_Command Line - Fatal编程技术网

使用ctrl+;结束凯撒密码

使用ctrl+;结束凯撒密码,c,command-line,C,Command Line,我知道已经发布了一些类似的问题,但我尝试的所有解决方案都没有修复我的代码。所以,我的凯撒密码按计划工作。但是,我希望能够使用ctrl+d而不是ctrl+c退出。我现在的代码是: int main (int argc, char *argv[]){ char code[500], ch; int c, key; key = atoi(argv[1]); printf("%s",code); for(;;){

我知道已经发布了一些类似的问题,但我尝试的所有解决方案都没有修复我的代码。所以,我的凯撒密码按计划工作。但是,我希望能够使用ctrl+d而不是ctrl+c退出。我现在的代码是:

int main (int argc, char *argv[]){
        char code[500], ch; 
        int c, key;
        key = atoi(argv[1]);
        printf("%s",code);
        for(;;){
                fgets(code, 500, stdin);
                for(c = 0;code[c] != '\0'; ++c){
                        ch = code[c];
                        if(ch >= 'a' && ch <= 'z'){
                                ch = ch + key;
                                if(ch > 'z'){
                                        ch = ch - 26 ;
                                }
                                else if(ch < 'a'){
                                        ch = ch + 26;
                                }
                                code[c] = ch;
                        }
                        else if(ch >= 'A' && ch <= 'Z'){
                                ch = ch + key;
                                if(ch > 'Z'){
                                        ch = ch - 'Z' + 'A' - 1;
                                }
                                else if(ch < 'A'){
                                        ch = ch + 26;
                                }
                                code[c] = ch;
                        }
                }
                printf("%s\n", code);
        }
        return 0;
}
它返回“cde”并保持命令行挂起,以便我可以键入另一个字符串。 但是,当我按下ctrl+d时,它只是重复程序(如果我在看到cde后按下ctrl+d,它将返回efg),当我希望它在按下时退出程序

我找到的一个解决方案是添加一个

if(code == EOF (or '\0' or NULL)) {
   break;
}
除了警告我有点和整数比较警告外,它们都不起作用。 有人知道如何解决这个问题吗?
非常感谢您的帮助

当您键入时,您的程序没有直接读取它,您的操作系统首先读取所有内容,当它看到Ctrl+C时,它会向程序发送一个中断以停止其操作。为了使其正常工作,您必须进入正在运行的任何操作系统的设置,并将其设置为热键

当您键入时,您的程序没有直接读取它,您的操作系统首先读取所有内容,当它看到Ctrl+C时,它会向程序发送一个中断以停止其操作。为了使其正常工作,您必须进入正在运行的任何操作系统的设置,并将其设置为热键

替换:

 for(;;){
                fgets(code, 500, stdin);
与:

EOF将导致FGET返回NULL,从而停止您的程序。

替换:

 for(;;){
                fgets(code, 500, stdin);
与:


EOF将导致FGET返回NULL,从而停止您的程序。

提示:不要在代码中乱扔像500这样的“幻数”,而是定义一个变量或常量来表示它。这避免了在后续更改中更改大部分但不是全部代码时出现错误。阅读起来很有趣,谢谢Cencoroll。提示:不要在代码中乱放“神奇数字”,如500,定义一个变量或常量来表示它。这避免了在后续更改中更改大部分但不是全部内容时出现错误。阅读起来很有趣,谢谢Cencoroll。
while (fgets(code, sizeof code, stdin)) {