И так,надеюсь вы справились со своим первым шифрованием,если у вас что-то не получилось-не отчаивайтесь.Сейчас мы всё разберём,но для начала разберёмся с кириллицей.
Как и говорил ранее-у линукса проблем с кириллицей нет,потому как по умолчанию использует кодировку UTF-8,а вот ребята из Microsoft гордо показали всем средний палец и сказали: "Нам плевать на стандартны,у нас будет windows-1251".
Мы же покажем средний палец в ответ и всё исправим.Для начала нам понадобится библиотека,а именно locale.h.В ней содержится всё необходимое для нас.Из этой библиотеки нам необходима функция setlocale и вот как она работает:
setlocale(часть программы для изменения,"язык")
Все параметры этой функции можете узнать здесь или если вы под линуксом по команде man setlocale.
Можете поэкспериментировать с параметрами,мы же будем использовать самый частый случай,а именно:
setlocale(LC_ALL,"rus");
Хочу научить вас ещё одному трюку,который неизвестен некоторыми си программистам,а именно быстрое обнуление массива.Полезно это тем,что мы очищаем весь мусор из массива,который мог попасть в вывод или куда ещё.Делается это очень просто:
char buf[256]={0};
Вместо такого трюка многие программисты используюсь функции,что очень медленно.
Теперь разберёмся с алгоритмом шифрования,весь код я не стану переписывать,разберу лишь алгоритм.
char buf[256]={0};
int num=0;
scanf("%256s",buf);//строка для шифра
scanf("%d",&num);//ключ для шифра
for(int i=0;buf[i]!=0;++i)//цикл пока не найдёт ноль
printf("%c",buf[i]+num);//изменим символ прям в функции
При проверке под линуксом кириллица успешно расшифровывалась,хоть и получались "мусорные" символы.Это потому что один символ uft-8 занимает 2 байта,вместо одного в ascii.Решается это вводом своего массива символов,что мы в будущем рассмотрим.
На этом мы пока закончим.Перепишите программу по шифрованию с кириллицей,можете использовать мой алгоритм.Всего доброго!