Switch: default - przerywa działanie programu

0

W moim switchu mam case 1, case 2 i default. Chciałbym żeby default nie powodował wyłączenia się programu, ale pojawienie się komunikatu "Nieznana opcja. Prosze wybrac 1. lub 2." i mozliwosc wpisania znaku. Jak to zrobic?

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

unsigned ZliczZnaki(std::string strTekst, char chZnak)
{
	unsigned uIlosc = 0;

	for (unsigned i = 0; i <= strTekst.length() - 1; ++i)
	{
		if (strTekst[i] == chZnak)
			++uIlosc;
	}
	return uIlosc;
}

int tekst()
{
		std::string strNapis;
	std::cout << "Podaj tekst, w ktorym maja byc zliczane znaki: ";
	std::cin >> strNapis;

	char chSzukanyZnak;
	std::cout << "Podaj znak, ktory bedzie liczony: ";
	std::cin >> chSzukanyZnak;

	std::cout << "Znak '" << chSzukanyZnak << "' wystepuje w tekscie " << ZliczZnaki(strNapis, chSzukanyZnak) << " raz(y)."
		<< std::endl;
	return 1;
	_getch();
}
void main()
{
	int x; 
	int koniec;
	do
	{
	tekst();
	std::cout << "Czy chcesz kontynuowac prace z programem? " << "\n\n 1. Tak " << "\n\n 2. Nie " << std::endl;
	std::cin >> x;
	switch ( x )
	{
	case 1:
		main(); 
		break;
	case 2: 
		koniec = 0;
		std::cout << "Do zobaczenia w przyszlosci! " << std::endl;
			break;
	default:
		std::cout << "Nieznana opcja. Prosze wybrac 1. lub 2. " << std::endl;
	}
	} while( koniec = 0 );
	_getch();
}
1

To akurat masz dobrze, źle masz warunek while oraz wartość zmiennej koniec.

  1. Jaką wartość ma koniec jeśli nie byliśmy w case 2?
  2. Operator porównania to == a nie =
    A zapętlanie programu przez rekurencyjne wywoływanie main to woła o pomstę do nieba...
0
  1. Poza case 2 "koniec" nie istnieje - jest pusty. Stworzyłem "koniec" po to żeby wykorzystać go do zakończenia działania programu.
  2. Zmieniłem przy while ( koniec == 0 ) i program nie wyłącza się już po podaniu case 2 :( Podałem w case 1 koniec = 1, w default = koniec = 2, w case 2 koniec = 0, czyli jesli koniec = 0 to konczy sie petla, a nie konczy sie.

Zapetlanie przez - jak to nazwales - rekurencyjne wywolywanie main to jedyny sposob jaki przyszedl mi do glowy, zeby 'zrestartowac' program.

1
  1. WTF? Jakie znów "nie istnieje"? Przecież normalnie dochodzisz zawsze do pętli while i sprawdzasz wartośc 'koniec' która jest NIEUSTALONA!
  2. Bo powinno tam być != 0
  3. WTFx2? Przecież używasz tu już pętli więc po co w ogóle takie cuda? Przecież program sie pętli aż do czasu podania 0 tak czy siak!

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