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

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

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

подскажите почему возникает ошибки в коде и как реализовать то что пользователь не может просматривать и изменять файл
static void Encrypt(byte[] buf, int len, string pass)
        {
            int n = 0;
            for (int i = 0; i < len; i++)
            {
                buf[i] = (byte)(buf[i] ^ (byte)pass[n]);
                n++;
                if (n > pass.Length - 1) n = 0;
            }
        }
        static void Main(string[] args)
        {
 
            Random rnd = new Random();
            int score = 0;
 
            List<Score> scoreTable = ReadScores();
 
            Console.WriteLine("Введите имя пользователя");
            string nameUsers = Console.ReadLine();
 
            Score newScore = new Score();
            newScore.name = nameUsers;
            newScore.score = score;
 
            Console.WriteLine("Введите команду");
            string command = Console.ReadLine();
            if (command == "clear")
            {
                System.IO.File.Delete("scores.txt");
                System.IO.File.Create("scores.txt");
                return;
            }
 
            Console.Clear();
            int i = 0;
            for (i = 0; i < scoreTable.Count; i++)
            {
                if (scoreTable[i].name == nameUsers)
                {
                    if (scoreTable[i].score < score)
                    {
                        scoreTable[i].score = score;
                    }
                    break;
                }
            }
            if (i == scoreTable.Count)
            {
                scoreTable.Add(newScore);
            }

            scoreTable.Sort(CompareScore);
            if (scoreTable.Count > 7)
            {
                scoreTable.RemoveRange(7, scoreTable.Count - 7);
            }
 
            DrawScores(scoreTable);
            SaveScores(scoreTable);
 
            string filenameIn = "scores.txt";
            string password = "1";
 
            FileStream f1 = new FileStream(filenameIn, FileMode.Open);
 
            byte[] buffer = new byte[8192];
            int bytesReaded = 0;
            long totalReaded = 0;
            long totalBytes = f1.Length;
            Console.Write("Завершено:");
            while ((bytesReaded = f1.Read(buffer, 0, 8192)) > 0)
            {
                Encrypt(buffer, bytesReaded, password);
                f1.Write(buffer, 0, bytesReaded);
                totalReaded += bytesReaded;
                long persent = totalReaded * 100 / totalBytes;
                Console.CursorLeft = 10;
                Console.Write("{0}%", persent);
            }
            f1.Close();
            Console.ReadKey();
        }
        private static List<Score> ReadScores()
        {
 
            string rawData = System.IO.File.ReadAllText("scores.txt");
 
            string[] parsedData;
            parsedData = rawData.Split(new string[] { " ", "\r\n" },
            StringSplitOptions.RemoveEmptyEntries);
            List<Score> scoreTable = new List<Score>();
            for (int i = 0; i < parsedData.Length; i += 2)
            {
                Score userScore = new Score();
                userScore.name = parsedData[i];
                userScore.score = Convert.ToInt32(parsedData[i + 1]);//ошибка "индекс находится вне границ массива" возникает периодически
                scoreTable.Add(userScore);
            }
            return scoreTable;
        }
подчеркнутой строки не должно быть это возникает при шифровании

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

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

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


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

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

10   голосов , оценка 3.7 из 5
Похожие ответы