【发布时间】:2017-06-11 16:27:53
【问题描述】:
#include <stdio.h>
#include <string.h>
int main()
{
int key;
char line[500];
char ch = '\0';
int i = 0;
printf("Enter key: ");
scanf("%d", &key);
getchar();
printf("Enter line: ");
while(ch != '\n')
{
ch = getchar();
line[i] = ch;
i++;
}
int length = i;
int k = 0;
char temp[length];
for(i = 0; i < length; i++)
{
if((int)line[i] >= 65 && (int)line[i] <= 90)
{
temp[k++] = (int)line[i] + key;
} else if((int)line[i] >= 97 && (int)line[i] <= 122){
temp[k++] = (int)line[i] + key;
} else {
temp[k++] = line[i];
}
}
printf("\n");
for(i = 0; i < length; i++)
{
printf("%c", temp[i]);
}
}
到目前为止,我所做的是将字符转换为另一个字符。例如,如果我输入“abc ABC”,并且添加值(int key)是3,那么它应该打印出“def DEF”。
这很好用,但我想进一步实现的是在角色越界时倒带。例如,如果我输入“XYZ”并且添加值为3,它应该打印出“ABC”,而不是“[]”。我可以就如何解决这个问题获得任何帮助或建议吗?谢谢..
【问题讨论】:
-
使用模运算。
-
对不起,我该怎么做模运算?
-
这里不需要
cast,因为整数提升是隐式发生的。 -
哦,谢谢!!但是,这里发生了另一个问题.. 如果我输入 5 作为加数,输入“Veni,vidi,vici”作为字符串输入,我得到“jsn,nin,nhn”,而不是“Asn,nin,nhn”我可以请知道原因吗?
-
一般使用
int来存储getchar()的返回值。
标签: c ascii computer-science