初學者寫異或加密小程序,遇到編譯錯誤 error C2059: syntax error : 'type',問題集中在 scanf 格式串與函數調用語法。
// 錯誤 1:scanf 格式串多逗號
scanf("%c,%c", &cha, &chz); // 輸入必須帶逗號 "a,b",否則匹配失敗
// 錯誤 2:調用函數時帶返回類型
chr = unsigned char Encrypt(cha, chz); // 語法錯誤,應為 chr = Encrypt(cha, chz);
// 錯誤 3:printf 格式符 %r 不存在
printf("%r", chr); // 應為 %c (字符) 或 %d (整數)
#include
// 異或加密:相同為0,不同為1,雙次異或可還原
unsigned char Encrypt(unsigned char cKey, unsigned char cCode) {
return cKey ^ cCode;
}
int main() {
unsigned char cha, chz, chr;
printf("請輸入兩個字符(空格分隔): ");
// 讀取兩個非空白字符,自動跳過空白
scanf(" %c %c", &cha, &chz); // 關鍵:%c 前加空格吃掉殘留換行
chr = Encrypt(cha, chz); // 正確調用
printf("加密結果(字符): %c\n", chr); // 顯示對應 ASCII 字符
printf("加密結果(十進制): %d\n", chr); // 顯示數值 0-255
printf("加密結果(十六進制): 0x%02X\n", chr);
return 0;
}
| 問題 | 解決 |
|---|---|
| scanf("%c") 讀到上一行殘留 \n | 格式串開頭加空格: " %c" 跳過所有空白字符 |
| 函數調用不能帶返回類型 | 直接 函數名(參數) |
| %c 輸出不可見控制字符 | 改用 %d 或 %02X 查看數值 |
| 異或加密原理 | A ^ B = C; C ^ B = A,鍵值相同可解密 |
void xorEncrypt(char *data, int len, const char *key, int keyLen) {
for (int i = 0; i < len; i++) data[i] ^= key[i % keyLen];
}
記住:scanf 格式串是匹配模式,%c 前加空格是「吃空白」神技;函數調用只寫名字不寫類型,這兩條能消除 80% 初學者編譯錯誤。