C++, baza danych, slowniko-test

0

Czesc, musze napisac program w C++ ktory bedzie pozwalal na nastepujace rzeczy:

  • utworzenie bazy slowek pol - ang (podaje slowko w pl i potem jego tlumaczenie en lub odwrotnie i zapisuje do bazy)
  • wyszukiwanie slowek z bazy (szukam slowka pl i pokazuje mi tlumaczenie na en lub odwrotnie)
  • przeprowadzenie "testu" znajomosci slowek (wyrzuca losowe slowko pl z bazy i trzeba wprowadzic poprawne tlumaczenie en, test to 10 slowek i 60% musi byc wprowadzond poprawnie aby test byl zaliczony)
  • wyswietlenie calego slownika

Jestem kompletna noga z c++, czy moglby mi ktos z tym pomoc?

3

Dodaj do "Ogłoszenia Drobne".

0

W tym dziale pomagamy tym kto próbuje się nauczyć - za darmo.
Tym którzy nie próbują się nauczyć pomagamy (jak wspomniano wcześniej przez @PrzemolPrzemol) w dziale "Ogłoszenia Drobne" - niestety za drobną opłatą, zresztą to można się domyślić z nazwy działu ;)

0

Zle sie wyrazilem, ale to efekt pisana posta o 4 rano.
Sam program jako tako wiem jak zrobic tylko ze nie obiektowo a wlasnie taki ma byc.
Nie do konca wiem jak sie zabrac za to zapisywanie slowek i szukanie. Znaczy samo zapisywanie to jeszcze ok tylko jak to zrobic zeby slowko bylo powiazane ze swoim tlumaczeniem?
Test najprosciej byloby chyba zrobic gdybym przy zapisywaniu slowka do bazy przypisywal mu tez nr. Wtedy w tescie po prostu losowaloby nr z zakresu 1 do liczby slowek w bazie, wyswietlalo slowko odpowiadajace numerkowi a jakas tam zmienna w tle zliczalaby ile jest poprawnych odpowiedzi (i wiadomo jak >= 6 to zdane)

0

Mógłbym prosić o pokazanie std::map na jakimś przykładzie? Nie bardzo wiem jak tego użyć w praktyce.

0

Jak nie chcesz użyć sposoby z powyższego postu to możesz się pobawić 10 razy dłużej (przy okazji ćwicząc sobie wskaźniki) i zrobić listę struktur zawierających polski wyraz i angielski wyraz:

struct Element{
    char* WyrazPolski;
    char* WyrazAngielski;
    struct Element *NastepnyElement;
}; 

i potem zrobić funkcję dodającą elementy do listy http://www.p-programowanie.pl/cpp/lista-jednokierunkowa-c/

  1. jak wpiszesz jakiś wyraz po polsku i będziesz chciał go przetłumaczyć, to:
    a) Zapisujesz do tablicy znaków to co wpisałeś w klawiaturę;
    b) Jeździsz po liście i porównujesz tę tablicę z wyrazem z elementu listy. Do porównywania 2 wyrazów posłuż się http://cpp0x.pl/dokumentacja/standard-C/strcmp/320
    c) Aby wylosować jakąś liczbę posłuż się rand() z time.h

Masz w ogóle jakąś koncepcję jak zacząć swój program? Niekoniecznie "w kodzie".

0

Ok, zrobiłem póki co coś takiego:

#include "stdafx.h"
#include <iostream>
#include <string>
#include <fstream>
#include <map>

using namespace std;



class slownik
{
public:
	std::map<string, string> slowka;
	void dodaj(string pl, string en);
	void zawartosc();
};
	void slownik::dodaj(string pl, string en)
	{
		std::cout << "Podaj slowo po polsku: ";
		cin >> pl;
		std::cout << "Podaj slowo po angielsku: ";
		cin >> en;
		slowka[pl] = en;
		slowka[en] = pl;
		std::cout << "Slowo zostalo wprowadzone";
		cin.sync();
		cin.get();
	}

	void slownik::zawartosc()
	{
		cout << "Polski - Angielski\n";
		for (map<string, string>::iterator ii = slowka.begin(); ii != slowka.end(); ++ii)
		{
				cout << (*ii).first << " - " << (*ii).second << endl;
		}
		cin.sync();
		cin.get();

	}





int main()
{
	slownik slownik;
	int znak;
	ofstream plik("slownik");
	bool wyjdz=false;
	do
	{
		system("cls");
		std::cout << " \t \t \t SLOWNIK Polsko-Angielski";
		std::cout << "\n\n\n\n\n";
		std::cout << "1. Dodaj nowe slowo\n";
		std::cout << "2. Pokaz wszystkie slowa\n";
		std::cout << "3. Wyszukaj tlumaczenie\n";
		std::cout << "4. Wykonaj test ze snajomosci slowek\n";
		std::cout << "5. Wyjdz z programu\n";

		cin >> znak;
		switch (znak)
		{
		case 1:
		{
				  string pl, en;
				  slownik.dodaj(pl, en);
				  break;
		}
		case 2:
		{
				  slownik.zawartosc();
				  break;
		}
		case 3:
		{
				  std::cout << "3. Dziala\n";
				  break;
		}
		case 4:
		{
				  std::cout << "4. Dziala\n";
				  break;
		}
		case 5: wyjdz = true; break;
		default: cout << "Nieprawidlowa opcja!\n";
		}
	} while (!wyjdz);
	plik.close();
	exit(0);
}

 

Jak na razie program dodaje nowe słowo i wyświetla wszystkie. Jednak wyświetla je tak:

Polski - Angielski
dog - pies
dom - house
house - dom
pies - dog

. Jak zakładam to z powodu:

		slowka[pl] = en;
		slowka[en] = pl; 

Co zrobić, żeby wyświetlało tylko raz dane słowo a nie "w obie strony"?

1

slowka[pl] = en; tyle wystarczy, bez tej drugiej linijki.
Mapa, jak brzmi nazwa, służy do mapowania - a jeśli sobie zmapujesz na początku, że pies to dog, a potem z kolei, że dog to pies, no to robi się ciężko. Wystarczy jedno mapowanie słowa.

1

wystarczy CI jedna mapa. Jezeli chcesz zrobic w druga strone to nie szukasz po key tylko po value

0

Ok. Teraz jeszcze takie pytanie. Czy robienie testu jako osobnej klasy ma jakikolwiek sens?

1

Hola, hola, chyba nie zostawisz tej klasy w takiej formie, w jakiej teraz jest?
void slownik::dodaj(string pl, string en) - dlaczego pl oraz en są parametrami?

0

Możesz mieć kilka osobnych słowników i na każdym z nich niezależnie prowadzić test, więc jak najbardziej ma sens.

0

@Patryk27
Nie było pytania. Nie popatrzyłem co robię. Zmienione, poprawione.

1

Jedno z dwóch albo zmienne lokalne jeżeli wprowadzasz w tej metodzie (należy pamiętać że to głupie rozwiązanie) albo wprowadzenie ma być na zewnątrz wtedy przekazujesz gotowe napisy.

0

@_13th_Dragon
Tak, już wiem. Zorientowałem się po napisaniu posta.

0
	void slownik::szukaj()
	{
		string x;
		cout << "Podaj slowo: \n";
		cin >> x;
		it = slowka.find(x);
		if (it != slowka.end())
			cout << "ENG: " << it->second << "";
		else
		{
			if (it != slowka.begin())
			cout << "POL: " << it->first << "";  //tutaj nadal miało być -> second?
			else
				cout << "Podanego wyrazu nie ma w slowniku.\n";
		}
		cin.sync();
		cin.get();
	} 

Mam szukanie. Ma to działać tak, że pierwsza część wyświetla tłumaczenie jeśli podaliśmy słowo po polsku, druga tłumaczenie jeśli podaliśmy słowo po angielsku ostatni else wyświetla brak słowa (jeśli go po prostu nie ma). Jednak wywala mi program jeśli przejdzie on do tego co jest w pierwszym else.

0

To:

            if (it != slowka.begin())
            cout << "POL: " << it->first << "";
            else
                cout << "Podanego wyrazu nie ma w slowniku.\n";

jakiś dziwoląg, powinno być:

            cout << "Podanego wyrazu "<<x<<" nie ma w slowniku.\n";

i to wszystko.

0

No tak, tylko ta pierwsza część szuka mi tłumaczenie PL -> EN. Natomiast ta druga miała jeszcze sprawdzić EN -> PL i dopiero jeśli nadal nic nie znajdzie to wywalić, że nie ma słowa.

1

To musisz załatwić inaczej.
Jak szukasz polskiego słowa to tak jak wyżej.
Jak przechodzisz na szukanie angielskiego to przepisujesz wszystko do innej mapy na odwrót tmpslowka[en]=pl; po czym robisz slowka.swap(tmpslowka); i teraz szukasz wg angielskich, zauważ że:
one - they
jeden - one
więc twój pomysł jednoczesnego szukania bierze w łeb.
Ewentualnie możesz zrobić mapę: map<pair<bool,string>,string>
wtedy dodajesz: words[pair<bool,string>(true,pl)]=en;
oraz: words[pair<bool,string>(false,en)]=pl;
Przy takim podejściu najpierw szukasz: .find(pair<bool,string>(true,x)) po czym znalazłeś bądź nie szukasz: .find(pair<bool,string>(false,x))

0

OK. Zostało mi na jutro zrobić tylko test. Tylko najpierw jeszcze pytanie. Oto zapisywanie do pliku (odpalane na zamknięciu programu):

 
void slownik::zapisz()
{
	std::fstream plik;
	string nazwa_slownika;
	cout << "Pod jaka nazwa zapisac slownik?\n\n";
	cin >> nazwa_slownika;
	plik.open(nazwa_slownika, std::ios::in | std::ios::out | std::ios::app);
	for (it = slowka.begin(); it != slowka.end(); ++it)
		plik << it->first << "\t" << it->second << "\n";
	plik.close();
}

Dlaczego na końcu dodaje mi pustą linię?

2

Mazanie po ekranie ma być przy interfejsie z użytkownika, nie przy słowniku:

void slownik::zapisz(const string &nazwa_slownika)
  {
   std::ifstream plik(nazwa_slownika.c_str());
   for(auto it=slowka.begin();it!=slowka.end();++it) plik<<it->first<<'\t'<<it->second<<'\n';
   plik.close();
  }
0

daje ci na końcu pustą linię, bo po każdych 2 słowach daje ci znak nowej linii... jak nie chcesz tej linii na końcu, daj ifa, który nie wstawi znaku nowej linii na koniec gdy wypisujesz ostatni element

0

Zabrałem się trochę za porządkowanie programu. Teraz wygląda to chyba lepiej (oceńcie sami). Mam jednak jeden problem. Otóż trochę pomieszałem, dodałem kila rzeczy (zamykanie obecnie otwartego słownika itp.) i w main teraz to wygląda tak:

int main()
{
	nazwa_slownika = "autozapis";
	slownik slownik;
	system("cls");
	cout << "\t      Czy masz juz utworzony slownik?\n\n\n";
	cout << "\t\tY - TAK \t    N - NIE\n\n";
	bool wyjdz1;
	bool wyjdz = false;
	do
	{
		cin >> odpowiedz;
		switch (odpowiedz)
		{
		case (89 | 121) :
		{
							cout << "Jaki slownik chcesz wczytac?\n\n";
							cin >> nazwa_slownika;
							slownik.otworz(nazwa_slownika);
							slownik.czysc(nazwa_slownika);
							wyjdz = true;
							break;
		}
		case (78 | 110) :
		{
							wyjdz = true;
							break;
		}
		default:
		{
				   cout << "Nieprawidlowa opcja!\n";
				   break;
		}
		}
	} while (!wyjdz);

	system("cls");
	cout << " \t \t \t SLOWNIK\n";
	cout << " \t \t     Polsko-Angielski\n";
	cout << " \t \t     Angielsko-Polski\n";
	cout << "\n\n\n\n\n";
	wyjdz = false;
	do //petla z ktorej wychodzi po wejsciu w zamykanie slownika (case 7)
	{
		system("cls");
		cout << " \t \t \t SLOWNIK\n";
		cout << " \t \t     Polsko-Angielski\n";
		cout << " \t \t     Angielsko-Polski\n";
		cout << "\n\n\n\n\n";
		cout << "1. Dodaj nowe slowo\n";
		cout << "2. Pokaz wszystkie slowa\n";
		cout << "3. Wyszukaj tlumaczenie POL->ENG\n";
		cout << "4. Wyszukaj tlumaczenie ENG->POL\n";
		cout << "5. Wykonaj test ze snajomosci slowek\n";
		cout << "6. Wczytaj slownik\n";
		cout << "7. Zamknij slowniki\n";
		cout << "0. Wyjdz z programu\n";
		int znak;
		cin >> znak;

		switch (znak)
		{
		case 1:
		{
				  slownik.dodaj();
				  break;
		}
		case 2:
		{
				  cout << "Polski - Angielski\n";
				  slownik.zawartosc();
				  break;
		}
		case 3:
		{
				  slownik.szukajplen();
				  break;
		}
		case 4:
		{
				  slownik.szukajenpl();
				  break;
		}
		case 5:
		{
				  cout << "4. Dziala\n";
				  break;
		}
		case 6:
		{
				  cout << "UWAGA: Aby zapobiec utracie danych obecny slownik zostanie zapisany przed przejsciem dalej!\n\n";
				  cout << "Niezalecane jest wczytywanie wielu slownikow jesli chcemy dodawac nowe slowka\n";
				  cout << "Niezalecane jest zapisywanie slownika po wczytaniu wielu slownikow - spowoduje to powstanie 'mega slownika'\n";
				  cin.sync();
				  cin.get();
				  system("cls");
				  slownik.zapisz(nazwa_slownika);
				  cout << "Podaj nazwe slownika ktory chcesz wczytac\n";
				  cin >> nazwa_slownika;
				  slownik.otworz(nazwa_slownika);
				  break;

		}
		case 7:  //zamykanie slownika
		{
				  cout << "Czy chcesz zapisac slownik?\n\n";
				  cout << "Y - TAK - zalecane gdy chcemy otworzyc kolejny slownik do edycji\n";
				  cout << "N - NIE - zalecane gdy mamy wczytane wiele slownikow (i nie chcemy zapisac 'mega slownika'\n";
				  wyjdz1 = false;
				  do
				  {
					  cin >> odpowiedz;
					  switch (odpowiedz)
					  {
					  case (89 | 121) :
					  {
										  cout << "Podaj nazwe slownika: \n";
										  cin >> nazwa_slownika;
										  slownik.zapisz(nazwa_slownika);
										  slownik.czysc_slowka();
										  wyjdz1 = true;
										  break;
					  }
					  case (78 | 110) :
					  {
										  slownik.czysc_slowka();
										  wyjdz1 = true;
										  break;
					  }
					  default:
					  {
								 cout << "Nieprawidlowa opcja!\n";
								 break;
					  }
					  }
					  break;  //ten brake jest konieczny? jego usuniecie nic nie zmienia w kwestii problemu
				  } while (!wyjdz1);
		}
		case 0: wyjdz = true; break;
		default: cout << "Nieprawidlowa opcja!\n";
		}
	} while (!wyjdz);

	system("cls");
	cout << "Nastpi wyjscie z programu...\n\n\n";
	cout << "Czy chcesz zapisac slownik?\n";
	cout << "Y - TAK\n";
	cout << "N - NIE\n";
	wyjdz = false;
	do
	{
		cin >> odpowiedz;
		switch (odpowiedz)
		{
		case (89 | 121) :
		{
							cout << "Podaj nazwe slownika: \n";
							cin >> nazwa_slownika;
							slownik.zapisz(nazwa_slownika);
							slownik.czysc_slowka();
							wyjdz = true;
							break;
		}
		case (78 | 110) :
		{
							slownik.czysc_slowka();
							wyjdz = true;
							break;
		}
		default:
		{
				   cout << "Nieprawidlowa opcja!\n";
				   break;
		}
		}
	} while (!wyjdz);

	exit(0);
}
 

Problem polega na tym, że z jakiegoś powodu po wejściu w zamykanie słownika program wychodzi z głównej pętli programu. Nie potrafię znaleźć dlaczego.

3
case (89 | 121):
  1. Ten kod nie robi tego, co Ci się wydaje. Dlaczego zgadujesz zamiast sprawdzić w internecie?
  2. Po co te magiczne numerki? Literały 'a' czy 'x' były za bardzo czytelne?
  3. 99% funkcji mających powyżej 50 linijek kodu powinno zostać zrefaktoryzowanych. Twój main ma 180.
0

Okej, rozmowa na temat za bardzo zeszła w komentarze.
Tak - o to mi chodziło.
Wrzuć cały kod.

0
 
#include "stdafx.h"
#include <iostream>
#include <string>
#include <fstream>
#include <map>
#include <conio.h>

using namespace std;

class slownik
{
public:
	map<string, string> slowka;
	map<string, string> tmpslowka;
	map<string, string>::iterator it;
	fstream plik;
	string szukane, nazwa_slownika, pl, en;
	char odpowiedz;
	void dodaj();
	void zawartosc();
	void szukajplen();
	void szukajenpl();
	void zapisz(const string &nazwa_slownika);
	void otworz(const string &nazwa_slownika);
	void czysc(const string &nazwa_slownika);
	void czysc_slowka();
};
	void slownik::dodaj()
	{
		cout << "Podaj slowo po polsku: ";
		cin >> pl;
		cout << "Podaj slowo po angielsku: ";
		cin >> en;
		slowka[pl] = en;
		cout << "Slowo zostalo wprowadzone";
		tmpslowka[en] = pl;
		cin.sync();
		cin.get();
	}
	
	void slownik::zawartosc()
	{
		for (map<string, string>::iterator ii = slowka.begin(); ii != slowka.end(); ++ii)
		{
				cout << (*ii).first << " - " << (*ii).second << endl;
		}
		cin.sync();
		cin.get();
	}
	
	void slownik::szukajplen()
	{
		cout << "Podaj slowo: \n";
		cout << "POL: ";
		cin >> szukane;
		it = slowka.find(szukane);
		if (it != slowka.end())
			cout << "ENG: " << it->second << "";
		else
		{
			cout << "Podanego wyrazu nie ma w slowniku.\n";
		}
		cin.sync();
		cin.get();
	}

	void slownik::szukajenpl()
	{
		slowka.swap(tmpslowka);
		cout << "Podaj slowo: \n";
		cout << "ENG: ";
		cin >> szukane;
		it = slowka.find(szukane);
		if (it != slowka.end())
			cout << "POL: " << it->second << "";
		else
			cout << "Podanego wyrazu nie ma w slowniku.\n";
		cin.sync();
		cin.get();
	}

	void slownik::zapisz(const string &nazwa_slownika)
	{
		fstream plik;
		plik.open(nazwa_slownika, std::ios::in | std::ios::out | std::ios::app);
		for (auto it = slowka.begin(); it != slowka.end(); ++it) plik << it->first << '\t' << it->second << '\n';
		plik.close();
	}
	
	void slownik::czysc(const string &nazwa_slownika)
	{
		ofstream plik_zeruj;
		plik_zeruj.open(nazwa_slownika);
		plik_zeruj.close();
	}

	void slownik::otworz(const string &nazwa_slownika)
	{
								plik.open(nazwa_slownika, std::ios::in | std::ios::out | std::ios::app);
								while (!plik.eof())
								{
									plik >> pl >> en;
									slowka[pl] = en;
								}
	}

	void slownik::czysc_slowka(){
		slowka.clear();
		tmpslowka.clear();
	}

class test
{

};


fstream plik;
string szukane, nazwa_slownika, pl, en;
char odpowiedz;
int main()
{
	nazwa_slownika = "autozapis";
	slownik slownik;
	system("cls");
	cout << "\t      Czy masz juz utworzony slownik?\n\n\n";
	cout << "\t\tY - TAK \t    N - NIE\n\n";
	bool wyjdz1;
	bool wyjdz = false;
	do
	{
		cin >> odpowiedz;
		switch (odpowiedz)
		{
		case ('y') :
		case ('Y') :
		{
							cout << "Jaki slownik chcesz wczytac?\n\n";
							cin >> nazwa_slownika;
							slownik.otworz(nazwa_slownika);
							slownik.czysc(nazwa_slownika);
							wyjdz = true;
							break;
		}
		case ('n') :
		case ('N') :
		{
							wyjdz = true;
							break;
		}
		default:
		{
				   cout << "Nieprawidlowa opcja!\n";
				   break;
		}
		}
	} while (!wyjdz);
	system("cls");
	cout << " \t \t \t SLOWNIK\n";
	cout << " \t \t     Polsko-Angielski\n";
	cout << " \t \t     Angielsko-Polski\n";
	cout << "\n\n\n\n\n";
	wyjdz = false;
	do
	{
		system("cls");
		cout << " \t \t \t SLOWNIK\n";
		cout << " \t \t     Polsko-Angielski\n";
		cout << " \t \t     Angielsko-Polski\n";
		cout << "\n\n\n\n\n";
		cout << "1. Dodaj nowe slowo\n";
		cout << "2. Pokaz wszystkie slowa\n";
		cout << "3. Wyszukaj tlumaczenie POL->ENG\n";
		cout << "4. Wyszukaj tlumaczenie ENG->POL\n";
		cout << "5. Wykonaj test ze snajomosci slowek\n";
		cout << "6. Wczytaj slownik\n";
		cout << "7. Zamknij slowniki\n";
		cout << "0. Wyjdz z programu\n";
		int znak;
		cin >> znak;

		switch (znak)
		{
		case 1:
		{
				  slownik.dodaj();
				  break;
		}
		case 2:
		{
				  cout << "Polski - Angielski\n";
				  slownik.zawartosc();
				  break;
		}
		case 3:
		{
				  slownik.szukajplen();
				  break;
		}
		case 4:
		{
				  slownik.szukajenpl();
				  break;
		}
		case 5:
		{
				  cout << "4. Dziala\n";
				  break;
		}
		case 6:
		{
				  cout << "UWAGA: Aby zapobiec utracie danych obecny slownik zostanie zapisany przed przejsciem dalej!\n\n";
				  cout << "Niezalecane jest wczytywanie wielu slownikow jesli chcemy dodawac nowe slowka\n";
				  cout << "Niezalecane jest zapisywanie slownika po wczytaniu wielu slownikow - spowoduje to powstanie 'mega slownika'\n";
				  cin.sync();
				  cin.get();
				  system("cls");
				  slownik.zapisz(nazwa_slownika);
				  cout << "Podaj nazwe slownika ktory chcesz wczytac\n";
				  cin >> nazwa_slownika;
				  slownik.otworz(nazwa_slownika);
				  break;

		}
		case 7:
		{
				  cout << "Czy chcesz zapisac slownik?\n\n";
				  cout << "Y - TAK - zalecane gdy chcemy otworzyc kolejny slownik do edycji\n";
				  cout << "N - NIE - zalecane gdy mamy wczytane wiele slownikow (i nie chcemy zapisac 'mega slownika'\n";
				  wyjdz1 = false;
				  do
				  {
					  cin >> odpowiedz;
					  switch (odpowiedz)
					  {
					  case ('y') :
					  case ('Y') :
					  {
										   cout << "Podaj nazwe slownika: \n";
										   cin >> nazwa_slownika;
										   slownik.zapisz(nazwa_slownika);
										   slownik.czysc_slowka();
										   wyjdz1 = true;
										   break;
					  }
					  case ('n') :
					  case ('N') :
					  {
										   slownik.czysc_slowka();
										   wyjdz1 = true;
										   break;
					  }
					  default:
					  {
								 cout << "Nieprawidlowa opcja!\n";
								 break;
					  }
					  }
				  } while (!wyjdz1);
		}
		case 0: wyjdz = true; break;
		default:
		{
				   cout << "Nieprawidlowa opcja!\n";
				   break;
		}
		}
	} while (!wyjdz);

	system("cls");
	cout << "Nastpi wyjscie z programu...\n\n\n";
	cout << "Czy chcesz zapisac slownik?\n";
	cout << "Y - TAK\n";
	cout << "N - NIE\n";
	wyjdz = false;
	do
	{
		cin >> odpowiedz;
		switch (odpowiedz)
		{
		case ('y') :
		case ('Y') :
		{
							 cout << "Podaj nazwe slownika: \n";
							 cin >> nazwa_slownika;
							 slownik.zapisz(nazwa_slownika);
							 slownik.czysc_slowka();
							 wyjdz = true;
							 break;
		}
		case ('n') :
		case ('N') :
		{
							 slownik.czysc_slowka();
							 wyjdz = true;
							 break;
		}
		default:
		{
				   cout << "Nieprawidlowa opcja!\n";
				   break;
		}
		}
	} while (!wyjdz);

	exit(0);
}

Problem nadal występuje. Main ogarnę tak jak pisałem jak skończę program.
Przy okazji pytanie. Da się w jakiś prosty sposób chara zmusić do przyjmowania tylko jednego znaku? Możliwość przyjęcia 2 i więcej może sprawiać problemy w switch case.

1

Da się w jakiś prosty sposób chara zmusić do przyjmowania tylko jednego znaku A spróbuj zmusić typ char do przechowywania większej ich ilości :P

<font size="1">Nie, nie bawimy się w kompresję alfabetu</span>

0

@spartanPAGE
Może źle to napisałem. Chodzi o to, że w switch case np. na początku programu kiedy pyta mnie o podanie znaku jeśli wpisze nie jeden znak a dwa to program zrobi switch case dla jednego i drugiego. Jeśli wpiszę bh to wyświetli mi "Nieprawidlowa opcja" dwa razy (raz dla b i raz dla h). To jeszcze nie taki wielki problem, ale jesli wpisze nb to program szaleje (wywala wynik dla n i dla b na zmiane).

1 użytkowników online, w tym zalogowanych: 0, gości: 1