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

Ocena kodu - Szyfr Cezara

0 głosów
612 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 (215,210 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ź 377 wizyt
pytanie zadane 27 lipca 2018 w PHP przez OdsetekGlupoty Pasjonat (15,360 p.)
0 głosów
2 odpowiedzi 1,063 wizyt
pytanie zadane 13 kwietnia 2018 w C i C++ przez Duke_Astaroth Nowicjusz (240 p.)
0 głosów
0 odpowiedzi 601 wizyt
pytanie zadane 11 lipca 2018 w C i C++ przez niezalogowany

93,772 zapytań

142,730 odpowiedzi

323,382 komentarzy

63,369 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...