Я также немного изменил ваш код:
string textToEncode = File.ReadAllText(@"C:\Users\ASUS\Desktop\szyfrowanie2\TextSample.txt").ToLower();
char[] distinctLetters = textToEncode.Distinct().ToArray();
var count = distinctLetters.Count();
Console.WriteLine("Letters used in text: \n\n");
for (int i = 0; i < count; i++)
{
if (Equals(distinctLetters[i], ' ')) { Console.Write("<space>"); }
else if (Equals(distinctLetters[i], '\r')) { Console.Write("<cr>"); }
else if (Equals(distinctLetters[i], '\n')) { Console.Write("<lf>"); }
else { Console.Write(" " + distinctLetters[i] + " "); }
}
Несколько мелких вещей. Я слил две первые строки, изменил "" в ", чтобы теперь сравнивать символы, изменил подсчет символов, чтобы использовать отдельные элементы вместо выполнения одной и той же команды Distinct (), и я добавил два условия для обработкивозврат каретки и перевод строки. (Я всегда смешиваю их, кстати.)
Теперь это показывает правильный результат, но также должно объяснить, почему пропали символы! Простая причина, на самом деле. В вашем текстовом файле есть символ возврата каретки, который вернет курсор назад влево. Это приведет к тому, что первый символ будет заменен пробелом ...
Таким образом, ваш код на самом делепечатает "wi ...", но затем получает '\ r'. Затем он напечатает пробел, вернется к началу строки и запишет еще один пробел через ''! Затем будет следующий символ новой строки, который напечатает второй пробел над буквой «w», переместится на следующую строку и снова напечатает пробел. Тогда остальное печатается ...
Просто, не правда ли? Но путем захвата этих двух специальных символов с помощью двух дополнительных операторов if это исправляется ... :-) Символы '\ r' и '\ n' часто пропускаются в консольных приложениях, давая неожиданные результаты при печати.