2016-10-27 4 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); 

[I] 페이지를 사용하면 내가 당신의 페이지에 배열의 요소 번호를 액세스하려는 것을 의미 맞아. 그러나 p는 단순히 정수 변수이며 배열이 아니기 때문에이 값에 도달하는 것은 불가능합니다.

배열로 사용하기를 원하는 것은 문자열 매개 변수 중 하나 인 key 또는 msg입니다. CS50의 문자열 변수는 클래식 C의 char * 변수와 동일하며 문자 배열로 사용됩니다.

+0

대단히 감사합니다. 나는 무언가를 배웠고 나는 또한 그것을 바로 잡았다. 이제는 오류가 줄어 듭니다. 내 루프에서 실수를 저지른 것처럼 느껴집니다. –

+0

당신은 여러 번 p [t]와 l [i]를 사용 했으므로, 위에서 설명한 것과 기본적으로 같은 것입니다. 당신이 그것들을 수정한다면, 당신은 잘되어야합니다. – Isuka

+0

Millie Smith, Isuka 대단히 고마워요. 그것의 성가신 나는 간단한 실수를합니다. –