使用模数循环 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;
}
目前我在我的程序中遇到一个问题,我正在尝试使用一种非常基本的加密方法,如果输入 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;
}