嘿伙计们,我开始学习 C,我被要求专门编写一个程序,一个凯撒密码(所以,我们的想法是用字母表中三个位置的字母替换消息中的任何字母。)
我的实现应该读取一行文本,然后根据读取的第一个字符执行加密或解密。如果第一个字符是 $,那么我应该加密该行的其余部分,并在输出之前添加字符 ?。如果第一个字符是 ?,那么我应该解密该行的其余部分,并在输出之前添加字符 $。
例如:?Wr eh, ru qrw wr eh
输出应该是:$To be, or not to be
反之亦然。
这是我到目前为止的代码:
#include <stdio.h>
int main(void){
char code[100], ch;
int i;
scanf("%s", &code);
if(code[0] == '$'){
for(i = 0; code[i] != '\0'; ++i){
ch = code[i];
if(ch >= 'a' && ch <= 'z'){
ch = ch + 3;
if(ch > 'z'){
ch = ch - 'z' + 'a' - 1;
}
code[i] = ch;
}
else if(ch >= 'A' && ch <= 'Z'){
ch = ch + 3;
if(ch > 'Z'){
ch = ch - 'Z' + 'A' - 1;
}
code[i] = ch;
}
}
printf("?%s\n", code);
return 0;
}
}
但问题是,它返回第一个字符,并在有空格时停止。 例如我输入:$To 输出到:?$To
有人可以帮我弄清楚我做错了什么吗?
最佳答案
这是使用 getchar()
的示例让您开始:
#include <stdio.h>
int main() {
int ch; // Either EOF or one of the chars in 0-255
while ((ch = getchar()) != EOF) {
if ('A' <= ch && ch <= 'Z') {
int offset = ch - 'A';
printf("%c", 'a' + offset);
} else {
printf("%c", ch);
}
}
}
现在,这段代码在很多方面并不完美,但它确实演示了如何使用 getchar()
。每次调用 getchar()
时,它都会从标准输入中获取下一个 char
并将其作为 int
返回。这是因为当输入结束时,它返回特殊值EOF
,该值超出了char
的范围。
这里的 while 循环是一个常见的习惯用法。当执行到达循环时,它首先必须调用getchar()
,其结果存储到ch
中。然后它检查ch
是否为EOF
。如果不是,则循环处理读取的字符。否则,它退出并且程序结束。
循环体打印它看到的每个字符,同时将大写字母转换为小写。
关于c - C 语言的简单凯撒密码程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42795258/