• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Ocena kodu - Szyfr Cezara

Object Storage Arubacloud
0 głosów
312 wizyt
pytanie zadane 22 kwietnia 2017 w C i C++ przez SebekChlebek Stary wyjadacz (11,290 p.)

Witam. Stworzyłem kolejny mini program i chciałbym prosić o sprawdzenie kodu i wskazówki na przyszłość.

#include <iostream>
#include <Windows.h>
#include <conio.h>
#include <fstream>
#include <string>

using namespace std;

void code();
void decode();
int getKey();

int main()
{
	while (true)
	{
		system("cls");

		char choose;

		cout << "\n\tSzyfr Cezara\n" <<
			"\t[1] Szyfruj\n\t[2] Odszyfruj\n\t[3] Wyjscie\n";

		choose = getch();

		switch (choose)
		{
		case '1':
		{
			code();
			break;
		}

		case '2':
		{
			decode();
			break;
		}

		case '3':
		{
			return 0;
			break;
		}

		default:
		{
			cout << "\n\n\t Nieprawidłowy klawisz";
			Sleep(500);
			break;
		}

		}

	}

	return 0;
}

void code()
{
	while (true)
	{
		system("cls");
		
		int key;
		string line;
		fstream fileToCode;
		fstream fileCoded;

		key = getKey();

		fileToCode.open("doszyfru.txt", ios::in);
		fileCoded.open("szyfr.txt", ios::out);

		if (fileToCode.fail())
		{
			cout << "\n\tNie znaleziono pliku do odszyfrowania!\n";
			Sleep(500);
			fileToCode.close();
			fileToCode.clear();

			continue;
		}

		while (getline(fileToCode, line))
		{
			string lineCoded;

			for (int i = 0; i < line.length(); i++)
			{
				if ((line[i] + key) < 127)
				{
					lineCoded += line[i] + key;
				}
				else
				{
					lineCoded += line[i] + key - 95;
				}
			}


			fileCoded << lineCoded << endl;
		}

		fileCoded.close();
		fileCoded.clear();

		fileToCode.close();
		fileToCode.clear();

		break;
	}

	cout << "\n\n\tZakodowano!";
	Sleep(500);

	return;

}

void decode()
{
	while(true)
	{
		system("cls");

		int key;
		string line;
		fstream fileToDecode;
		fstream fileDecoded;

		key = getKey();

		fileToDecode.open("szyfr.txt", ios::in);
		fileDecoded.open("odszyfr.txt", ios::out);

		if (fileToDecode.fail())
		{
			cout << "\n\tNie znaleziono pliku do odszyfrowania!\n";
			Sleep(500);
			fileToDecode.close();
			fileToDecode.clear();
			
			continue;
		}

		while (getline(fileToDecode, line))
		{
			string lineDecoded;

			for (int i = 0; i < line.length(); i++)
			{
				if ((line[i] - key) > 31)
				{
					lineDecoded += line[i] - key;
				}
				else
				{
					lineDecoded += line[i] - key + 95;
				}
			}


			fileDecoded << lineDecoded << endl;
		}

		fileDecoded.close();
		fileDecoded.clear();

		fileToDecode.close();
		fileToDecode.clear();

		break;
	}

	cout << "\n\n\tRozkodowano!";
	Sleep(500);

	return;
}

int getKey()
{
	system("cls");
	
	int key;
	
	while (true)
	{
		cout << "\n\tSzyfr Cezara\n" <<
			"\tPodaj klucz: ";
		cin >> key;

		if (cin.fail() || key < 0)
		{
			cout << "\n\tTaki klucz nie isnieje!\n";
			Sleep(500);
			cin.clear();
			cin.sync();
			cin.ignore();

			continue;
		}

		return key;
	}


	return 0;
}


Z góry dzięki.

2 odpowiedzi

0 głosów
odpowiedź 22 kwietnia 2017 przez QizmoPL Stary wyjadacz (11,440 p.)
Bledy

1. Biblioteka windows, conio

2.Using namepace

3.Brak obslugi bledow
komentarz 22 kwietnia 2017 przez SebekChlebek Stary wyjadacz (11,290 p.)
Co oznacza brak obsługi błędów? Przy wpisywaniu wartości myślę, że wszystkie wyjątki są uwzględnione tzn. gdy jest litera to program wypisuje, że jest błędna wartość.

Dzięki za odpowiedź :)
komentarz 22 kwietnia 2017 przez QizmoPL Stary wyjadacz (11,440 p.)
Faktyczinie
0 głosów
odpowiedź 22 kwietnia 2017 przez Ehlert Ekspert (212,670 p.)

Powiem Ci że wygląda całkiem przyzwoicie. Korzystasz z Linuxa? Bo jeśli tak to proponuję Ci przerobić program tak żeby był do użytku ładnie z konsoli:

cesar --file message.txt --key -4 --screenout
# albo
cesar --file codes.txt --key 2 --fileout crypted.txt

Co do kodu... Funkcja decode nie powinna się nazywać decode laugh Jak nazwa mówi decode ma dekodować, więc pobrać jakiś argument i coś zwrócić. Tymczasem u Ciebie czyści ekran, czyta plik, pisze po ekranie, co więcej nic nie zwraca. 

komentarz 22 kwietnia 2017 przez SebekChlebek Stary wyjadacz (11,290 p.)
Faktycznie, tylko pętla dekodująca powinna się zaleźć w tej funkcji. Zresztą tak samo funkcja code();

Nie, nie korzystam z Linuxa.

Dzięki za opinię :)

Podobne pytania

0 głosów
1 odpowiedź 252 wizyt
pytanie zadane 27 lipca 2018 w PHP przez OdsetekGlupoty Pasjonat (15,360 p.)
0 głosów
2 odpowiedzi 646 wizyt
pytanie zadane 13 kwietnia 2018 w C i C++ przez Duke_Astaroth Nowicjusz (240 p.)
0 głosów
0 odpowiedzi 481 wizyt
pytanie zadane 11 lipca 2018 w C i C++ przez niezalogowany

92,552 zapytań

141,400 odpowiedzi

319,532 komentarzy

61,938 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...