2014-09-24 68 views
0

我必須爲我的C#intro類編寫一個「加密」程序。我遇到兩個問題:加密/解密崩潰

  1. 當輸入負數或在解密過程中計算出負數時,它會崩潰。 - 它返回並且未處理的異常錯誤:System.FormatException:輸入字符串的格式不正確。
  2. 解密應該是加密的反向,而不使用原始變量。你如何反轉餘數計算?

我知道這是該做的部分,而循環是這樣的問題,我只是不知道如何繼續提示爲一個值,如果輸入負數,如果解密運算過程中遇到的保持它崩潰。任何指導將不勝感激。感謝您看看它!

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 2014-09-24 00:51:39

+2

@ Heather「它崩潰」從來沒有足夠的解釋你的問題。您**需要**提供有關崩潰的更多信息。你應該在調試器下運行你的程序,它會給你提供很多關於崩潰的好消息(比如調用堆棧),你應該在你的問題中重現。當你包含這些信息時,它可以讓你很容易地得到一個很好的答案。 – spender 2014-09-24 01:00:20

+0

@spender - 好點!對不起,我是這個網站的新手,並在這方面尋求幫助。如果輸入了 - ,則返回並且未處理的異常錯誤:System.FormatException:輸入字符串的格式不正確。我遇到的問題是我必須對負面負責,儘管它可能不是現實世界。 – Heather 2014-09-24 01:14:25

回答

0

政策是,不要繼續,直到用戶輸入一個'正確的'輸入。這裏是代碼示例,請注意我使用numstr[0] - 索引獲取第一個字符而不是numstr.Substring(0, 1),因此代碼看起來更清晰。

 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); 

至於你的第二個問題,你無法用乘法來扭轉餘計算((d+7)%10),您應該再次使用求餘運算符(d+10-7)%10,附加10加入,以保持它得到負的結果。

解密過程中還有一個錯誤,您可以轉向您的調試器尋求幫助。