2016-10-27 11 views
0

CS50 pset2 Vigenere Cypherのコードは次のとおりです。私はCのプログラミングに新しいです。私のコードで何が間違っていますか? (Vigenere cypher cs50、pset2)

[私はいくつかの提案と(下)このコードを得た後、一度コードを編集した私の新しい編集したコードである。]

私は、コードを実行すると、それは無限ループを生成し、また、新しい暗号化されたテキストは次のように生産されていませんあるはずです。私のコードの修正に関するいくつかの提案やアドバイスをお願いできますか? ありがとう、

#include <stdio.h> 
#include <cs50.h> 
#include <stdlib.h> 
#include <string.h> 
#include <ctype.h> 

int main(int argc, string argv[]) 
{ 
    if (argc != 2) //if it is not rqual to 2, it gives an error message. 
    { 
     printf("Enter the valid input : \n"); 
     return 1; 
    } 

    if (argc == 2) //if two commands are given then it proceeds to other step. 
    { 
     string k = argv[1]; 
     string m = GetString(); 
     int l = strlen(k); 
     int p = strlen(m); 



     for(int i = 0; i <= p ; i++) //it has to keep on rotating from 0 to len of string and back to zero and so on. 
     { 
      { 
       i = i % l; 
      } 


      if (isalpha(m[i]) && isalpha(k[i])) // it proceeds ahead only if the input given is an alphabet, if the input is sth other than alphabet it prints exactly as it is. 
      { 


       for(int t = 0; t <= p ; t++) 
       { 
        if(isupper(m[t])) // when is it capital letter. 
        { 
         printf("%c", (m[t] - 65 + k[i]) % 26 + 65); 
        } 
        if(islower(m[t])) // when it is small letter. 
        { 
         printf("%c" , (m[t] - 97 + k[i])% 26 + 97); 
        } 

       } 

      } 


      else //if it is not an alphabet it returns as it is. 
      { 
       printf("%c", m[i]); 
      } 
     }  

    } 
     printf("\n"); 
     return 0; 
} 
+2

コンパイラが言ったように、 'p'はポインタ、配列、またはベクトルではありません。それは 'int'です。 –

答えて

0

エラーを見てみましょう。あなたが与えたパラメータは配列ではなく、配列として使用しているということです。そして、それはそうです:pは整数ではなく、配列です。

int p = strlen(msg); 

Pを使用して、[i]は、あなたのPアレイのI要素番号にアクセスしたいということを意味します。しかし、pは単純に整数変数であり、配列ではないので、この値に達することは不可能です。

おそらく配列として使用したかったのは、文字列パラメータのkeyまたはmsgのいずれかでした。 CS50の文字列変数は、古典的なCのchar *変数に相当し、文字の配列として使用されます。

+0

ありがとうございました。私は何かを学んだし、私もそれを訂正した。今度はそれが私により少ない誤りを与える。私は私のループにもいくつかの間違いをしたような気がします。 –

+0

あなたは何回もp [t]とl [i]を使いましたが、これは上で説明したのと基本的に同じです。あなたがそれらを修正するなら、あなたは大丈夫でしょう。 – Isuka

+0

ミルキースミス、ありがとうございました。私はそのような単純な間違いをするのは迷惑なことです。 –

関連する問題