嘿伙计们我开始学习C,并且我被要求专门编写一个程序,一个caesar密码(因此,想法是用字母表中的三个字母替换消息中的任何字母。 )
我的实现应该读取一行文本然后执行加密或解密,具体取决于读取的第一个字符。如果第一个字符是$,那么我应该加密该行的其余部分,并在输出之前加上字符?。如果第一个字符是?,那么我应该解密该行的其余部分,并在输出之前加上字符$。
所以例如:?呃呃,ru qrw wr eh
输出应为:$是或不是
反之亦然。
所以这是我目前的代码:
#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;
}
}
但问题是,它返回第一个字符,并在有空格时停止。 比如我输入:$输出到:?$到
有人可以帮我弄清楚我做错了吗?
答案 0 :(得分:1)
以下是使用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
。如果没有,则循环处理读取的字符。否则,它退出并且程序结束。
循环体打印它看到的每个字符,同时将大写字母转换为小写字母。