使用模数循环 9-0 并打印

Using modulo to loop 9-0 and printing

目前我在我的程序中遇到一个问题,我正在尝试使用一种非常基本的加密方法,如果输入 5,则会打印 9。

下面是一段代码,由我的代码元素组成,用于重现正在发生的事情。

#include <stdio.h>
#include <conio.h>

int main()
{

int i, j;
char password[9];


printf("Please enter a password:\n\n");
scanf("%8c", &password);



for(i = 0; i < 8; i++)
    {
        if(password[i] >= '0' && password[i] <= '9')
        {
            password[i] = (char)(password[i] + 4 % 10);
        }

        if((password[i] >= 'a' && password[i] <= 'z') || (password[i] >= 'A' && password[i] <= 'Z') )
        {
            password[i] = (char)((password[i] - 'a' + 4) % 26 + 'a');
        }
    }

    for(j =  0; j < 8; j++)
    {
        printf("%c", password[j]);
    }

}

你必须以相同的方式处理数字和字母。你有:

        password[i] = (char)(password[i] + 4 % 10);
        ...
        password[i] = (char)((password[i] - 'a' + 4) % 26 + 'a');

您需要对数字进行减法和加法 '0',就像对字母进行 'a' 一样:

        password[i] = (char)((password[i] - '0' + 4) % 10 + '0');
        ...
        password[i] = (char)((password[i] - 'a' + 4) % 26 + 'a');
  • password[i] + 4 % 10 总是等于 password[i] + 4 因为 % 的优先级高于 +.
  • scanf("%8c", &password); 由于类型不匹配导致未定义的行为。删除 & 并将其写为 scanf("%8c", password);.
  • 你应该分开处理大写字母和小写字母,因为例如 'A' - 'a' + 4 如果你使用 ASCII 码就会变成负值,那么结果将是你不想要的。

试试这个:

#include <stdio.h>

int main(void)
{

    int i, j;
    char password[9] = "{0}";

    printf("Please enter a password:\n\n");
    scanf("%8c", password);

    for(i = 0; i < 8; i++)
    {
        if(password[i] >= '0' && password[i] <= '9')
        {
            password[i] = (char)((password[i] + 4) % 10);
        }

        if(password[i] >= 'a' && password[i] <= 'z')
        {
            password[i] = (char)((password[i] - 'a' + 4) % 26 + 'a');
        }

        if(password[i] >= 'A' && password[i] <= 'Z')
        {
            password[i] = (char)((password[i] - 'A' + 4) % 26 + 'A');
        }
    }

    for(j =  0; j < 8; j++)
    {
        printf("%c", password[j]);
    }

    putchar('\n');
    return 0;
}