它是关于实现凯撒密码来加密用户给出的输入
It's about implementing the Caesar-cipher code to encrypt the input given by the user
该代码采用要编码的输入(字符串)和来自用户的密钥,这样当将密钥添加到输入时,输入会增加给定密钥的数量。对于前。如果密钥是 2,那么输入 A 变为 C,b 变为 d,依此类推。
我已经编写了相同的代码,但无法获得输出。
int main()
{
int x,i,y,c;
char text[20];
printf("enter the plaintext:");
gets(text);
printf("enter the key: ");
scanf("%d",&x);
for (y=0;y<strlen(text);y++)
{
if (text[i]>='a'&&text[i]<='z'&&text[i]>='A'&&text[i]<='Z' )
{
int c=(int)text[i]+x;
printf("%c\n",text[i]);
}
}
}
我得到的结果是空白。请帮助我。
您初始化了 y 变量而不是 i 变量
试试这个:
for (i = 0; i < strlen(text); i++)
{
...
}
注:
如果您使用以下标志编译代码 -Wall -Wextra -Werror
了解更多关于您可能遇到的错误(例如未使用的变量)将对您有很大帮助。
示例:gcc -Wall -Werror -Wextra youprogram.c -o output
你还有其他错误,不仅仅是这个,
所以我建议你解决你的问题:(所有输出字符都是可打印的)
#include <stdio.h>
#include <string.h>
int main(void)
{
char text[250];
size_t i;
int key;
printf("Enter the plaintext : ");
if (fgets(text, sizeof(text), stdin) != NULL)
{
printf("Enter the key : ");
scanf("%d", &key);
for(i = 0; i < strlen(text); i++)
{
if (text[i] >= 'a' && text[i] <= 'z')
putchar((((text[i] - 'a') + key) % 26) + 'a');
else if (text[i] >= 'A' && text[i] <= 'Z')
putchar((((text[i] - 'A') + key) % 26) + 'A');
else
putchar(text[i]);
}
}
return (0);
}
你的提案有很多问题,需要检查输入是否成功,你在 y 而不是 i[=23 上迭代=],你计算新的字符代码,但你不打印它
这里是更正的提议:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main()
{
char text[100];
printf("enter the plaintext:");
if (fgets(text, sizeof(text), stdin) != NULL) {
int key;
printf("enter the key: ");
if (scanf("%d", &key) == 1) {
int i;
for (i=0; text[i] != 0; ++i)
{
if (isalpha(text[i]))
putchar(text[i] + key); /* may not be printable */
else
putchar(text[i]);
}
}
}
return 0;
}
编译与执行:
pi@raspberrypi:/tmp $ gcc -pedantic -Wextra c.c
pi@raspberrypi:/tmp $ ./a.out
enter the plaintext:the sentence to encode
enter the key: 3
wkh vhqwhqfh wr hqfrgh
pi@raspberrypi:/tmp $ ./a.out
enter the plaintext:Alea jacta est
enter the key: 2
Cngc lcevc guv
为了好玩,32 不是编码大写字符的好键:
pi@raspberrypi:/tmp $ ./a.out
enter the plaintext:THE FIVE BOXING WIZARDS JUMP QUICKLY.
enter the key: 32
the five boxing wizards jump quickly.
该代码采用要编码的输入(字符串)和来自用户的密钥,这样当将密钥添加到输入时,输入会增加给定密钥的数量。对于前。如果密钥是 2,那么输入 A 变为 C,b 变为 d,依此类推。
我已经编写了相同的代码,但无法获得输出。
int main()
{
int x,i,y,c;
char text[20];
printf("enter the plaintext:");
gets(text);
printf("enter the key: ");
scanf("%d",&x);
for (y=0;y<strlen(text);y++)
{
if (text[i]>='a'&&text[i]<='z'&&text[i]>='A'&&text[i]<='Z' )
{
int c=(int)text[i]+x;
printf("%c\n",text[i]);
}
}
}
我得到的结果是空白。请帮助我。
您初始化了 y 变量而不是 i 变量
试试这个:
for (i = 0; i < strlen(text); i++) { ... }
注:
如果您使用以下标志编译代码 -Wall -Wextra -Werror
了解更多关于您可能遇到的错误(例如未使用的变量)将对您有很大帮助。
示例:gcc -Wall -Werror -Wextra youprogram.c -o output
你还有其他错误,不仅仅是这个,
所以我建议你解决你的问题:(所有输出字符都是可打印的)
#include <stdio.h>
#include <string.h>
int main(void)
{
char text[250];
size_t i;
int key;
printf("Enter the plaintext : ");
if (fgets(text, sizeof(text), stdin) != NULL)
{
printf("Enter the key : ");
scanf("%d", &key);
for(i = 0; i < strlen(text); i++)
{
if (text[i] >= 'a' && text[i] <= 'z')
putchar((((text[i] - 'a') + key) % 26) + 'a');
else if (text[i] >= 'A' && text[i] <= 'Z')
putchar((((text[i] - 'A') + key) % 26) + 'A');
else
putchar(text[i]);
}
}
return (0);
}
你的提案有很多问题,需要检查输入是否成功,你在 y 而不是 i[=23 上迭代=],你计算新的字符代码,但你不打印它
这里是更正的提议:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main()
{
char text[100];
printf("enter the plaintext:");
if (fgets(text, sizeof(text), stdin) != NULL) {
int key;
printf("enter the key: ");
if (scanf("%d", &key) == 1) {
int i;
for (i=0; text[i] != 0; ++i)
{
if (isalpha(text[i]))
putchar(text[i] + key); /* may not be printable */
else
putchar(text[i]);
}
}
}
return 0;
}
编译与执行:
pi@raspberrypi:/tmp $ gcc -pedantic -Wextra c.c
pi@raspberrypi:/tmp $ ./a.out
enter the plaintext:the sentence to encode
enter the key: 3
wkh vhqwhqfh wr hqfrgh
pi@raspberrypi:/tmp $ ./a.out
enter the plaintext:Alea jacta est
enter the key: 2
Cngc lcevc guv
为了好玩,32 不是编码大写字符的好键:
pi@raspberrypi:/tmp $ ./a.out
enter the plaintext:THE FIVE BOXING WIZARDS JUMP QUICKLY.
enter the key: 32
the five boxing wizards jump quickly.