Исправить ошибку выхода за пределы массива при шифровании текста - C#

Узнай цену своей работы

Формулировка задачи:

подскажите почему возникает ошибки в коде и как реализовать то что пользователь не может просматривать и изменять файл
Листинг программы
  1. static void Encrypt(byte[] buf, int len, string pass)
  2. {
  3. int n = 0;
  4. for (int i = 0; i < len; i++)
  5. {
  6. buf[i] = (byte)(buf[i] ^ (byte)pass[n]);
  7. n++;
  8. if (n > pass.Length - 1) n = 0;
  9. }
  10. }
  11. static void Main(string[] args)
  12. {
  13. Random rnd = new Random();
  14. int score = 0;
  15. List<Score> scoreTable = ReadScores();
  16. Console.WriteLine("Введите имя пользователя");
  17. string nameUsers = Console.ReadLine();
  18. Score newScore = new Score();
  19. newScore.name = nameUsers;
  20. newScore.score = score;
  21. Console.WriteLine("Введите команду");
  22. string command = Console.ReadLine();
  23. if (command == "clear")
  24. {
  25. System.IO.File.Delete("scores.txt");
  26. System.IO.File.Create("scores.txt");
  27. return;
  28. }
  29. Console.Clear();
  30. int i = 0;
  31. for (i = 0; i < scoreTable.Count; i++)
  32. {
  33. if (scoreTable[i].name == nameUsers)
  34. {
  35. if (scoreTable[i].score < score)
  36. {
  37. scoreTable[i].score = score;
  38. }
  39. break;
  40. }
  41. }
  42. if (i == scoreTable.Count)
  43. {
  44. scoreTable.Add(newScore);
  45. }
  46.  
  47. scoreTable.Sort(CompareScore);
  48. if (scoreTable.Count > 7)
  49. {
  50. scoreTable.RemoveRange(7, scoreTable.Count - 7);
  51. }
  52. DrawScores(scoreTable);
  53. SaveScores(scoreTable);
  54. string filenameIn = "scores.txt";
  55. string password = "1";
  56. FileStream f1 = new FileStream(filenameIn, FileMode.Open);
  57. byte[] buffer = new byte[8192];
  58. int bytesReaded = 0;
  59. long totalReaded = 0;
  60. long totalBytes = f1.Length;
  61. Console.Write("Завершено:");
  62. while ((bytesReaded = f1.Read(buffer, 0, 8192)) > 0)
  63. {
  64. Encrypt(buffer, bytesReaded, password);
  65. f1.Write(buffer, 0, bytesReaded);
  66. totalReaded += bytesReaded;
  67. long persent = totalReaded * 100 / totalBytes;
  68. Console.CursorLeft = 10;
  69. Console.Write("{0}%", persent);
  70. }
  71. f1.Close();
  72. Console.ReadKey();
  73. }
  74. private static List<Score> ReadScores()
  75. {
  76. string rawData = System.IO.File.ReadAllText("scores.txt");
  77. string[] parsedData;
  78. parsedData = rawData.Split(new string[] { " ", "\r\n" },
  79. StringSplitOptions.RemoveEmptyEntries);
  80. List<Score> scoreTable = new List<Score>();
  81. for (int i = 0; i < parsedData.Length; i += 2)
  82. {
  83. Score userScore = new Score();
  84. userScore.name = parsedData[i];
  85. userScore.score = Convert.ToInt32(parsedData[i + 1]);//ошибка "индекс находится вне границ массива" возникает периодически
  86. scoreTable.Add(userScore);
  87. }
  88. return scoreTable;
  89. }
подчеркнутой строки не должно быть это возникает при шифровании

Решение задачи: «Исправить ошибку выхода за пределы массива при шифровании текста»

textual
Листинг программы
  1. for (int i = 0; i < parsedData.Length-1; i += 2)

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.7 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы