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

Problem z programem switch case

Object Storage Arubacloud
0 głosów
220 wizyt
pytanie zadane 29 października 2018 w C i C++ przez xBartosz4x Nowicjusz (140 p.)

Mam napisany program i jeżeli rozpatruje go osobno, czyli, np wybiorę 3,potem wyjdę wybiorę 1 itd... wszystko działa ok. Jednak jak program idzie po kolei tak jak ma iść czyli case(1),case(2),case(3),case(4).Wywala mi krzaki na trzecim case. 

Ciekawostka, jeżeli usunę case(3), to mam krzaki w case(4)

#include<iostream>
using namespace std;
int main()
{
    int tablica[1000], n, wybor, k;
    char napis[100];
    cout << "MENU" << endl;
    cout << "1.Pobieranie liczby elementow" << endl;
    cout << "2.Wyswietlanie dodatnich elementow" << endl;
    cout << "3.Wyswietla napis az do 0" << endl;
    cout << "4.Liczenie spacji" << endl;
    cin >> wybor;
    cin.ignore();
    switch (wybor)
    {
    case(1):
    
    cout << "Podaj liczbe elementow";
    cin >> n;
    for (int i = 0; i < n; i++)
    {
        cout << "Podaj " << i+1 << " element tablicy";
        cin >> tablica[i];
    }
    case(2):
        for (int i = 0; i < n; i++)
        {
            if (tablica[i] > 0) {
                cout << endl;
                cout << tablica[i] << endl;
            }
        }
    case(3):
        cout << "Wpisz linie tekstu";
        cin.getline(napis, 100);
        for (int i = 0; napis[i] != '0'; i++)
        {
            cout << napis[i];
        }
    case(4):
        int spacja = 0;
        cout << "Wpisz linie tekstu";
        cin.getline(napis, 100);
        for (int i = 0; i<100; i++)
        {
            if (napis[i] == ' ') {
                spacja = spacja + 1;
            }
        }
        cout << endl;
        cout << spacja;

    }
        system("pause");
        return 0;
}

 

2 odpowiedzi

+1 głos
odpowiedź 29 października 2018 przez Poczprogramista123 Bywalec (2,900 p.)
Krzaczki masz dlatego bo wpewnym momencie zaczynasz wypisywac z tablicy rzeczy ktorych nie ma bo nie zostaly tam zapisane(sa tam smieci czyli twoje krzaczki). Popracuj nad petla wypisujaca tablice typu char. I to jest bledem wielkim  napis[i]!='0'(w przykladzie jaki pokazales)
0 głosów
odpowiedź 30 października 2018 przez Huberti Gaduła (4,500 p.)
for (int i = 0; napis[i] != '0'; i++)

Powinno być:

for (int i = 0; napis[i] != '\0'; i++)

Zastanów się również nad używaniem string, zamiast łańcuchów w stylu C. Dzięki temu mógłbyś napisać to dużo prościej:

#include <iostream>
#include <cstdlib>//to do system("pause"), ale lepiej skorzystac z cin.get()
#include <string>

using namespace std;

int main()
{
	int tablica[1000], rozmiar, wybor;
	string napis;
	cout << "MENU" << endl;
	cout << "1. Pobieranie liczby elementow" << endl;
	cout << "2. Wyswietlanie dodatnich elementow" << endl;
	cout << "3. Wyswietla napis az do 0" << endl;
	cout << "4. Liczenie spacji" << endl;
	cin >> wybor;
	cin.ignore();
	switch (wybor)
	{
	case 1:
		cout << "Podaj liczbe elementow (maksymalnie 1000): ";
		cin >> rozmiar;
		for (int i = 0; i < rozmiar; i++)
		{
			cout << "Podaj " << i + 1 << " element tablicy";
			cin >> tablica[i];
		}
	case 2:
		for (int i = 0; i < rozmiar; i++)
		{
			if (tablica[i] > 0) {
				cout << endl << tablica[i] << endl;
			}
		}
	case 3:
		cout << "Wpisz linie tekstu ";
		getline(cin, napis);//pobierz linie tekstu z konsoli i zapisz ja w napis
		cout << "Twoj tekst: " << napis << endl;
	case 4:
		int spacja = 0;
		cout << "Wpisz linie tekstu";
		getline(cin, napis);//pobierz linie tekstu z konsoli i zapisz ja w napis
		for (size_t i = 0; i < napis.size(); i++)//napis.size() reprezentuje obecna dlugosc napisu 
		{
			if (napis[i] == ' ') {
				spacja++;//inkrementacja, czyli dodanie 1 do aktualnej wartosci zmiennej
			}
		}
		cout << "Liczba spacji w Twoim tekscie: " << spacja << endl;
	}
	system("pause");
}

Generalnie to menu nie ma większego sensu, bo i tak trzeba najpierw skorzystać z opcji numer 1, aby móc skorzystać z opcji numer 2 (inaczej wartości będą niezainicjalizowane) oraz bez względu na wybór użytkownika będą wykonywane pozostałe opcje case np. użytkownik podaje 3, a wykonywane są 3 i 4 (to ze względu na brak instrukcji break; przed następnym case).

 

 

komentarz 30 października 2018 przez xBartosz4x Nowicjusz (140 p.)
Wpisanie w for (!='\0') nie pomogło ale jak wstawiłem break i pętle while(1) case(3) trzeba wybrać i nie następuje po case(1) i case(2) dlatego nie wywala mi błędu. Dzięki za pomoc. Będę pewnie jeszcze odzywał się na forum.

Podobne pytania

0 głosów
1 odpowiedź 550 wizyt
pytanie zadane 30 maja 2018 w C i C++ przez Virius Początkujący (490 p.)
0 głosów
0 odpowiedzi 190 wizyt
pytanie zadane 30 maja 2017 w C i C++ przez Huberti Gaduła (4,500 p.)
+3 głosów
1 odpowiedź 370 wizyt
pytanie zadane 22 października 2021 w C i C++ przez CrisGoldmann Nowicjusz (200 p.)

92,579 zapytań

141,429 odpowiedzi

319,657 komentarzy

61,963 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!

...