#include<stdio.h>
int main()
{
int amount,i;
char message[81],encry[81];
printf("Enter message to be encrypted : ");
gets(message);
printf("Enter shift amount (1-25) : ");
scanf("%d");
for(i=0;message!='\0';i++)
{
if(message[i] >='A' && message[i] <='Z')
encry[i]=((message[i]-'A')+amount)%26+'A';
}
printf("Encrypted message : ");
int j;
for(j=0;message[j]!='\0';j++)
printf("%c",encry[j]);
return 0;}
我尝试编写一个凯撒密码但它无法运行。请帮我。 谢谢。
答案 0 :(得分:4)
<强> 1 强>
printf("Enter shift amount (1-25) : ");
scanf("%d");
^ missing variable here (you need to pass an argument of type int *)
那么你在哪里拿输入键呢?
你需要在amount
变量中输入这样的输入 -
printf("Enter shift amount (1-25) : ");
scanf("%d",&amount);
因此,您不会在amount
中存储任何内容并且未初始化。并且您使用它,因此会导致未定义的行为。
2. 在这个循环中 -
for(i=0;message!='\0';i++) // you compare here char * with char
条件应该是 -
for(i=0;message[i]!='\0';i++)
3。不要使用gets
接受输入,它不会阻止溢出。使用fgets
-
fgets(message,81,stdin);
答案 1 :(得分:1)
scanf("%d")
语法错误必须与scanf("<format specfier>",&variable);
因此修复程序为scanf("%d", &amount)
int j;
在for循环之前添加变量不是一个好习惯。
答案 2 :(得分:1)
问题:
下面:
scanf("%d");
%d
需要第二个参数(类型为int*
)来存储扫描的数字。你可能想要:
scanf("%d", &amount);
您在这里比较char
和char*
:
for(i=0;message!='\0';i++)
你可能想要
for(i = 0; message[i] != '\0'; i++)
不要使用gets()
,因为它已被弃用。请改用fgets
:
fgets(message, sizeof(message), stdin);
请注意,fgets
会使用换行符并将其存储在message
中(如果有空格)。