0

我正在尝试制作一个使用凯撒密码加密文本的程序。要移动的位置数将作为命令行参数提供给程序,并且不应加密字母以外的字符。程序应该只在输入结束时停止。我的问题是程序省略了修改数字的行。该程序在我学校提供的平台上运行,我不确定它是什么。请帮我修复程序。

这是我的程序

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main( int argc, char *argv[] ) {
int num = atoi(argv[1]);
char caesar[100];
char ch;
int shift = num%26;
while ( fgets(caesar, 100, stdin) != NULL){
  for(int i = 0; i < strlen(caesar); i++){
    ch = caesar[i];
    if( ch >= 97 && ch <= 122){
      if( ch + shift < 97){
      ch = ch + shift + 26;
      }
      else if( ch + shift > 122){
      ch = ch + shift - 26;
      }
      else{
      ch = ch + shift;
      }
      caesar[i] = ch;
    }
    else if( ch >= 65 && ch <= 90){
      if( ch + shift < 65){
      ch = ch + shift + 26;
      }
      else if( ch + shift > 90){
      ch = ch + shift - 26;
      }
      else{
      ch = ch +shift;
      }
      caesar[i] = ch;
    }
  }
}
printf("%s", caesar);

 return 0;
}

这是一些具有正确输出的示例,这
是我的程序所做的。程序忽略了 shift = num%26 我不知道为什么

4

0 回答 0