[英]Simple Caesar Cipher Program in C
大家好,我開始學習C語言,我被要求專門編寫一個程序,一個凱撒密碼(因此,想法是將消息中的任何字母替換為字母下方三個位置的字母。)
我的實現應讀取一行文本,然后根據讀取的第一個字符執行加密或解密。 如果第一個字符是$,則應該對其余行進行加密,並在輸出之前加上字符?。 如果第一個字符是?,則應該解密其余的行,並在輸出之前加上字符$。
因此,例如:?Wr eh,ru qrw wr eh
輸出應為:$ 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
。 如果不是,則循環處理已讀取的字符。 否則,它退出並且程序結束。
循環的主體會打印它看到的每個字符,同時將大寫字母轉換為小寫字母。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.