2016-11-15 1 views
1

현재 대체 암호화/암호 해독 프로그램을 만들고자 시도 중입니다. 이 프로그램은 파일에서 읽고 사용자가 지정한 키를 기반으로 문자를 암호화합니다. 예를 들어 파일에 "ATTACK AT DAWN"이 있고 주어진 키가 "LEMON"이면 결과 암호 텍스트는 "LXFOPV EF RNHR"이됩니다.대체 암호화가 문자를 반환하지 않음

나는 암호화 기능을 만들었지 만 값을 영숫자가 아닌 문자로 변경합니다. 어떤 도움을 주시면 감사하겠습니다. 나는 기능 아래에 붙여 넣은 :

void encrypt(ifstream& in_s, ofstream& out_s, char next, char& cypher, int& i, char key[]) 
{ 

    in_s.get(next); // get character from file 
    while (!in_s.eof()) 
    { 
      check_i(i); // check i value is within the constraint for key[4] 

      if(isupper(next)) // if uppercase run cypher 
      { 
        cypher = ((next - 65) + (key[i] - 65) % 26) + 65; 
      } 
      else if (islower(next)) 
      { 
        next = toupper(next); // change to upper 
        cypher = ((next - 65) + (key[i] - 65) % 26) + 65; 
        cypher = tolower(cypher); // change to lower 
      } 
      else // if blank do nothing 
      { 
        cypher = next; 
      } 
      cout << cypher; 


      in_s.get(next); // get next char 
      i++; // add 1 to i for key[i] 
    } 
} 

답변

0

당신은 operator precedence에 문제가 있습니다. 모듈러스 연산자 %은 추가보다 우선 순위가 높습니다. 그럼 당신의 합계를 분해하자

cypher = ((next - 65) + (key[i] - 65) % 26) + 65; 

이는 다음과 같이 처리됩니다 : 당신이 실제로 모듈은 모든 일에 걸쳐 행동에 대한 원한 무엇

cypher = (next - 65) 
     + ((key[i] - 65) % 26) 
     + 65; 

:

cypher = ((next - 65 + key[i] - 65) % 26) + 65; 

실제로 괄호의 바깥 쪽 집합은 필요하지 않지만 읽는 것이 더 쉬워집니다.

+0

아 내가 볼! 의견을 보내 주셔서 감사합니다. 나는 "암호화 된"문자가 여전히 모든 영숫자가 아니지만 그것을 고쳤습니다. 내 핵심 기능에 문제가있을 수 있다고 생각합니다. –

+0

프로그램의 _actual_ 출력을 보여주지 않았고'check_i' 함수의 정의를 보여주지 않았기 때문에 논평하기가 어렵습니다. – paddy

0

문제점은 배열에 대한 입력을 얻는 방법이었습니다. 나는 이런 식으로 뭔가를 시도했습니다 :

cout << "Please enter a 5 character key: "; 
cin >> key[5]; 

내가 같은 배열을 저장해야하는 경우 :

cout << "Please enter a 5 character key: "; 
cin >> key;