C中交换字母的加密
Encryption with swapping letters in C
我需要编写一个程序,从输入中读取一个以新行结尾的句子。该程序应该以字母 'a' 与 'z'、'b' 与 'y' 等交换的方式编写句子的加密。我不应该使用数组,这就是为什么我找不到解决这个问题的方法。
这是我的代码:
#include<stdio.h>
int main() {
char alphabet, temp;
while( scanf("%c", &alphabet) != '\n') {
for(char i ='a', j='z'; i <= 'z', j>='a'; i++, j--) {
if(alphabet == i) {
temp = j;
}
}
printf("%c", temp);
}
return 0;
}
当我输入:abc 作为输出时,我得到 zyxxxxxxxxxxxxxxxxxxxxxxxxx(无限数量的 x)。
总结一下:
Input:abc。输出:zyxxxxx(x 的无限个数).
你弄乱了 scanf
的 return 值:
while( scanf("%c", &alphabet) != '\n'){
您想在输入的字符(在 alphabet
中)是一个换行符时停止循环。
但是您测试了 scanf
的 return 值,它永远不会是 '\n'
,因为它 return 是转换字段的数量。
你可以这样试试:
while( scanf("%c", &alphabet) == 1 && alphabet != '\n'){
在启用警告的情况下编译您的代码(例如 Wall
标志)!这个:
for(char i ='a', j='z'; i <= 'z', j>='a'; i++, j--)
应该给:
warning: left-hand operand of comma expression has no effect [-Wunused-value]
您需要使用逻辑 AND 运算符 &&
而不是两个比较之间的逗号。
此外,使用 getchar()
代替,如下所示:
#include<stdio.h>
int main() {
char temp;
int ch;
while ((ch = getchar()) != '\n' && ch != EOF) {
for(char i ='a', j='z'; i <= 'z'&& j>='a'; i++, j--){
if(ch == i){
temp = j;
}
}
if(ch <= 'z'&& ch >= 'a') // do not print if 'ch' is a digit for example
printf("%c", temp);
}
return 0;
}
输出:
zyx
如果你必须使用 scanf()
,然后尝试读入 alphabet
,检查 scanf 的 return 值,并与换行符进行比较,如下所示:
while(scanf("%c", &alphabet) != 0 && alphabet != '\n')
我需要编写一个程序,从输入中读取一个以新行结尾的句子。该程序应该以字母 'a' 与 'z'、'b' 与 'y' 等交换的方式编写句子的加密。我不应该使用数组,这就是为什么我找不到解决这个问题的方法。
这是我的代码:
#include<stdio.h>
int main() {
char alphabet, temp;
while( scanf("%c", &alphabet) != '\n') {
for(char i ='a', j='z'; i <= 'z', j>='a'; i++, j--) {
if(alphabet == i) {
temp = j;
}
}
printf("%c", temp);
}
return 0;
}
当我输入:abc 作为输出时,我得到 zyxxxxxxxxxxxxxxxxxxxxxxxxx(无限数量的 x)。
总结一下: Input:abc。输出:zyxxxxx(x 的无限个数).
你弄乱了 scanf
的 return 值:
while( scanf("%c", &alphabet) != '\n'){
您想在输入的字符(在 alphabet
中)是一个换行符时停止循环。
但是您测试了 scanf
的 return 值,它永远不会是 '\n'
,因为它 return 是转换字段的数量。
你可以这样试试:
while( scanf("%c", &alphabet) == 1 && alphabet != '\n'){
在启用警告的情况下编译您的代码(例如 Wall
标志)!这个:
for(char i ='a', j='z'; i <= 'z', j>='a'; i++, j--)
应该给:
warning: left-hand operand of comma expression has no effect [-Wunused-value]
您需要使用逻辑 AND 运算符 &&
而不是两个比较之间的逗号。
此外,使用 getchar()
代替,如下所示:
#include<stdio.h>
int main() {
char temp;
int ch;
while ((ch = getchar()) != '\n' && ch != EOF) {
for(char i ='a', j='z'; i <= 'z'&& j>='a'; i++, j--){
if(ch == i){
temp = j;
}
}
if(ch <= 'z'&& ch >= 'a') // do not print if 'ch' is a digit for example
printf("%c", temp);
}
return 0;
}
输出:
zyx
如果你必须使用 scanf()
,然后尝试读入 alphabet
,检查 scanf 的 return 值,并与换行符进行比较,如下所示:
while(scanf("%c", &alphabet) != 0 && alphabet != '\n')