为什么我的Caesar密码无法运行?

时间:2015-09-27 06:35:04

标签: c

#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;}

我尝试编写一个凯撒密码但它无法运行。请帮我。 谢谢。

3 个答案:

答案 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)

  1. scanf("%d")语法错误必须与scanf("<format specfier>",&variable);

    相似

    因此修复程序为scanf("%d", &amount)

  2. int j;在for循环之前添加变量不是一个好习惯。

答案 2 :(得分:1)

问题:

  1. 下面:

    scanf("%d");
    

    %d需要第二个参数(类型为int*)来存储扫描的数字。你可能想要:

    scanf("%d", &amount);
    
  2. 您在这里比较charchar*

    for(i=0;message!='\0';i++)
    

    你可能想要

    for(i = 0; message[i] != '\0'; i++)
    
  3. 不要使用gets(),因为它已被弃用。请改用fgets

    fgets(message, sizeof(message), stdin);
    

    请注意,fgets会使用换行符并将其存储在message中(如果有空格)。