-2
以爲我已經完成了凱撒,但運行CHeck50的時候,我的代碼,因此失敗:加密「barfoo」爲「yxocll」採用23鍵 輸出無效ASCII文本 登錄 運行./caesar 23 ... 發送輸入barfoo ... 檢查輸出 「密文:yxocll」 ...CS50 PSET 2個凱撒錯誤的結果
任何人都可以看到什麼錯我的代碼?它似乎對大寫字母很好,但小寫字母和某些'鍵',我得到錯誤的結果,並不能找到原因。任何幫助將不勝感激。
例如:如果我嘗試使用17的密鑰來加密'foo',它應該返回'wff',但是我的代碼只返回'w'。用我寫的代碼說,要去128位,這不是一個字母,但我的代碼然後說,如果這是超過122,扣除26.這等於並返回'102', - 這是'f' 。難道是與刪除被分配到127
#include <cs50.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
int main(int argc, string argv[])
{
if (argc == 2) {
int a = atoi (argv[1]);
int b = a%26;
printf("plaintext: ");
//get string
string s = get_string();
printf ("ciphertext: ");
//iterate through string
for (int i=0, n =strlen(s); i<n; i++) {
//check if character is a letter
if (isalpha (s[i])) {
//check if letter is uppercase
if (isupper (s[i])) {
//calculate position of character in ASCI by adding 'Key'. If character is over 90, decrease character location by 26
char c = (s[i] + b);
if (c > 90) {
char d = c - 26;
printf ("%c", d);
} else
printf("%c", c);
} else
//For lowercase letters. If character location is over position 122, decrease location by 26
{
char e = (s[i] + b);
if (e>122) {
char f = e - 26;
printf("%c", f);
} else
printf("%c", e);
}
} else //print non letters with no change made
{
printf ("%c", s[i]);
}
}
}
printf ("\n");
return 0;
}
你正在檢查字符是否是一個字母的字符,這是大小寫。爲什麼要測試它的數值呢? –
因爲如果大寫字母在ASCII位置90上方,即超過大寫字母Z,它將返回一個不正確的非大寫字母。我需要檢查它的位置和減去26,以便A-Z環繞。 – Shaun
但它不會按字母順序排列,對不對? –