-1

我正在上 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;
}
4

1 回答 1

3

我怀疑这是因为您的char i默认设置为signed. 当您添加23到小写字母时,上面的任何内容104(being 127-23) 都会环绕成负数。查看您的代码,它将保持否定状态,因为它未通过后续测试并且没有被修改。

通常最好使用 进行char算术运算int,然后转换回char... 但您可能可以通过使用unsigned char.

于 2012-11-12T04:39:52.377 回答