我正在做CS50x课程而且我遇到了一个小问题。我问他们发生了什么,没有人知道发生了什么。
每当我尝试打印小写字母f时,它总会出现?尝试将23作为参数,并将abcdefghijklmnopqrstuvwxyz
作为输入。它搞砸了。这是代码:
#include <stdio.h>
#include <stdlib.h>
#include <cs50.h>
#include <string.h>
#include <ctype.h>
int main (int argc, string argv[]){
if(argc !=2){
return 1;
}
string x = GetString();
int key = atoi(argv[1]);
for(int a = 0, n = strlen(x); a < n; a++){
char i = key + x[a];
if(islower(x[a])){
if(i > 122){
i = (i-122) + 96;
}
}
if(isupper(x[a])){
if(i > 90){
i = (i-90) + 64;
}
}
printf("%c", i);
}
printf("\n");
return 0;
}
答案 0 :(得分:3)
我怀疑是因为char i
默认为signed
。当您将23
添加到小写字母时,任何高于104
(正在127-23
)的内容都会变成负数。查看您的代码,它将保持负面,因为它未通过后续测试,并且不会被修改。
通常最好使用char
进行int
算术运算,然后转换回char
...但您可以使用unsigned char
解决此问题。