【发布时间】:2021-09-10 06:23:23
【问题描述】:
我是编程新手。我目前正在用 c 编写一个 rot13 程序,我尝试使用“for”,“if”,它可以工作,直到字母 f 显示问号。如果我要从 a-z 写字母,加密结果就像:nopqrstuvwxyzabcde???????? .我试图改变加法/减法值、变量、int。结果不太好。
#include<stdio.h>
int main()
{
char message[100], ch;
int i;
printf("Enter a message to encrypt: ");
gets(message);
for(i = 0; message[i] != '\0'; ++i){
ch = message[i];
if(ch >= 'a' && ch <= 'z'){
ch = ch + 13;
if(ch > 'z'){
ch = ch - 26;
}
message[i] = ch;
}
else if(ch >= 'A' && ch <= 'Z'){
ch = ch + 13;
if(ch > 'Z'){
ch = ch - 26;
}
message[i] = ch;
}
}
printf("Encrypted message: %s", message);
return 0;
}
【问题讨论】:
-
首先,永远不要永远使用
gets,it's so dangerous,它甚至已经完全从C语言中删除了。使用例如fgets代替。其次,请缩进您的代码,以便更容易阅读和了解正在发生的事情。请记住,C 中的字符串实际上称为 null-terminated 字符串。 -
解决您的问题:以此为契机,学习如何使用 调试器 在监控变量及其值的同时逐语句执行代码。
-
使用模运算符。 sth like (letter+13)%26 so 33 become 7 without the if and else
-
好的,谢谢你们,非常感谢。
标签: c for-loop if-statement rot13