2014-09-24 1 views
0

C# 인트로 클래스에 대한 "암호화"프로그램을 작성해야합니다. 2 가지 문제가 발생했습니다 :암호화/복호화 충돌

  1. 음수가 입력되거나 암호 해독 프로세스 중에 음수가 계산되면 충돌이 발생합니다. - 반환하고 처리되지 않은 예외 오류 : System.FormatException : 입력 된 문자열이 올바른 형식이 아닙니다.
  2. 암호 해독은 원래 변수를 사용하지 않고 암호화의 역순으로 수행해야합니다. 어떻게 나머지 계산을 뒤집을 수 있습니까?

나는 do while 루프의 일부분이라는 것을 안다. 음수가 입력되면 해쉬 값을 묻는 메시지를 계속 표시하고 암호 해독 계산 중에 오류가 발생하지 않도록하는 방법을 모르겠다. . 모든 지침을 많이 주시면 감사하겠습니다. 그것을 살펴 주셔서 감사합니다!

public class MainClass 
{ 
    public static void Main(string[] args) 
    { 
    int num = 0; 
    int dnum = 0; 
     do 
     { 
     Console.Write("Please enter a non-negative integer to encrypt: "); 
    num = Convert.ToInt32(Console.ReadLine()); 
     string numstr = Convert.ToString(num); 
     string num1 = Convert.ToString(numstr.Substring(0, 1)); 
     string num2 = Convert.ToString(numstr.Substring(1, 1)); 
     string num3 = Convert.ToString(numstr.Substring(2, 1)); 
     string num4 = Convert.ToString(numstr.Substring(3, 1)); 
     int enum1 = ((Convert.ToInt32(num1) + 7) % 10); 
     int enum2 = ((Convert.ToInt32(num2) + 7) % 10); 
     int enum3 = ((Convert.ToInt32(num3) + 7) % 10); 
     int enum4 = ((Convert.ToInt32(num4) + 7) % 10); 
     Console.WriteLine("Encrypted Integer: {0:D4}", (1000 * enum3 + 100 * enum4 + 10 * enum1 + enum2)); 

     Console.Write("Please enter a non-negative integer to decrypt: "); 
     dnum = Convert.ToInt32(Console.ReadLine()); 
     string dnumstr = Convert.ToString(dnum); 
     string num1d = Convert.ToString(dnumstr.Substring(0, 1)); 
     string num2d = Convert.ToString(dnumstr.Substring(1, 1)); 
     string num3d = Convert.ToString(dnumstr.Substring(2, 1)); 
     string num4d = Convert.ToString(dnumstr.Substring(3, 1)); 
     int dnum1 = ((Convert.ToInt32(num1d) - 7) * 10); 
     int dnum2 = ((Convert.ToInt32(num2d) - 7) * 10); 
     int dnum3 = ((Convert.ToInt32(num3d) - 7) * 10); 
     int dnum4 = ((Convert.ToInt32(num4d) - 7) * 10); 
     Console.WriteLine("Decrypted Integer: {0:D4}", (1000 * dnum1 + 100 * dnum2 + 10 * dnum3 + dnum4)); 
     } while (num > 0); 
    } // end Main 
}// end class 
+0

단순히 음수를 확인하고 지침을 읽는 방법을 알지 못하도록 사용자에게 알립니다 (물론 정중 한 방법으로). – Wjdavis5

+2

@Heather "it crashes"는 결코 문제에 대한 충분한 설명이 아닙니다. 충돌에 대한 자세한 정보를 제공하려면 ** 필요합니다. 디버거에서 프로그램을 실행해야합니다. 그러면 디버거에서 호출 스택과 같은 크래시에 대한 많은 맛있는 정보를 얻을 수 있습니다.이 정보는 질문에서 재현해야합니다. 그러한 정보를 포함 시키면 질문에 대한 좋은 대답을 얻는 것이 훨씬 쉬워집니다. – spender

+0

@spender - 좋은 지적입니다! 죄송합니다. 저는이 사이트를 처음 사용하고 있으며이 분야에 대한 도움을 요청하고 있습니다. -가 입력되면 반환되고 처리되지 않은 예외 오류가 발생합니다. System.FormatException : 입력 문자열의 형식이 올바르지 않습니다. 내가 가지고있는 문제는 아마도 그것이 현실 세계가 아니더라도 부정적인면을 설명해야한다는 것입니다. – Heather

답변

0

정책은 사용자가 '올바른'입력을 입력 할 때까지 진행하지 마십시오. 다음은 코드 샘플입니다. numstr.Substring(0, 1) 대신 첫 번째 문자를 가져 오는 인덱스 인 numstr[0]을 사용하므로 코드가 더 깨끗해 보입니다. 당신이 되지 않은 나머지 계산 ((d+7)%10)을 반대하는 사용 곱셈, 다시 나머지 연산자 (d+10-7)%10를 사용해야 할 수 있습니다 두번째 질문에 대해서는

 int num = 0; 
     bool isValid = false; 
     do 
     { 
      Console.Write("Please enter 4 digits to encrypt: "); 
      string numstr = Console.ReadLine(); 
      if (numstr.Length == 4) 
      { 
       isValid = Char.IsDigit(numstr[0]) && Char.IsDigit(numstr[1]) 
         && Char.IsDigit(numstr[2]) && Char.IsDigit(numstr[3]); 
      } 
      if (isValid) 
       num = Convert.ToInt32(input); 
     } 
     while (!isValid); 

는 추가 (10)는 부정적인 결과를 얻기에서 그것을 유지하기 위해 추가됩니다.

암호 해독 프로세스에 또 다른 버그가 있습니다. 디버거에서 도움을 요청할 수 있습니다.