-1

私はCS50xクラスをやっていて、グリッチで立ち往生しています。私は彼らに何が起こっているのか尋ねましたが、誰も何が起こっているのかわかりませんでした。

小文字のfを印刷しようとすると、常に?として表示されます。引数およびabcdefghijklmnopqrstuvwxyz入力として23を実行してみてください。それはめちゃくちゃです。コードは次のとおりです。

#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デフォルトが。であるためだと思いますsigned23小文字に追加すると、 104(である127-23)上にあるものはすべてネガに折り返されます。コードを見ると、後続のテストに失敗し、変更されないため、ネガティブのままになります。

通常は、でchar算術演算を実行してintから、に変換して戻すのが最善charです。ただし、おそらく。を使用してこれを修正できますunsigned char

于 2012-11-12T04:39:52.377 に答える