シーザー暗号の暗号化と復号


c言語でシーザー暗号の暗号化と復号を実現したくてコードを書いたのですがうまくいきません。

**エラーメッセージ**  
コンパイル時に

[code]

    sizer3.c:31:2: warning: implicit declaration of function 'elseif' is invalid in C99 [-Wimplicit-function-declaration] elseif(j==1){ ^ sizer3.c:31:14: error: expected ';' after expression elseif(j==1){ ^ ; sizer3.c:46:3: error: expected expression else{ ^ 1 warning and 2 errors generated.
    
[/code]

とでます。

**ソースコード**

[code]

    #include <stdio.h>
    #define LEN 255
    
    int main(void)
    {
      char string[LEN];
      char angou[LEN];
      int  key, number, i,j;
    
    printf("暗号作成のときは0を\n");
    printf("暗号解読のときは1を\n");
    printf("終了するときは2を入力して下さい:");
    scanf("%d",&j);
    
     if(j==0){
     printf("鍵を入力してくだい:");
     scanf("%d", &key);
    printf("文字列を入力してください:");
     scanf("%s", string);
    
     i = 0;
     while(string[i] != '\0'){
       number = string[i] + key;
       angou[i] = number;
       ++i;
     }
     angou[i] = '\0';
    
     printf("作成された暗号:%s\n", angou);
    }
     elseif(j==1){
     printf("鍵を入力してくだい:");
     scanf("%d", &key);
     printf("文字列を入力してください:");
     scanf("%s", string);
     i = 0;
     while(string[i] != '\0'){
     angou[i] = string[i] - key;
     i++;
     }
     angou[i] = '\0';
     printf("暗号の解読結果(平文):%s\n", angou);
    }
      else{
      printf("終了");
    }
    
    return 0;
    }
    
[/code]




`elseif(j==1)` と続けて書いてしまうと `elseif`
という関数の呼び出しと解釈されてしまいます。そんな関数は宣言されていないよ＋実際リンクしても存在しないよ、でエラーとなっています。真にやりたいのは
`else if(j==1)`
なのだろうと推測（あなたのコードと違いスペースが１つ入っています。これによってキーワードが分離できているので当初の期待通りであろうと思う）

こういうのを避けるには

  * `if` には必ず `{ ...}` のように(複文でなくても)必ず鍵かっこを使う
  * `if` でなくて `switch` を使う

のがまあ定石ですよね。




`elseif(j==1)` と続けて書いてしまうと `elseif`
という関数の呼び出しと解釈されてしまいます。そんな関数は宣言されていないよ＋実際リンクしても存在しないよ、でエラーとなっています。真にやりたいのは
`else if(j==1)`
なのだろうと推測（あなたのコードと違いスペースが１つ入っています。これによってキーワードが分離できているので当初の期待通りであろうと思う）

こういうのを避けるには

  * `if` には必ず `{ ...}` のように(複文でなくても)必ず鍵かっこを使う
  * `if` でなくて `switch` を使う

のがまあ定石ですよね。

