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

Problem z programem switch case

0 głosów
352 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ź 632 wizyt
pytanie zadane 30 maja 2018 w C i C++ przez Virius Początkujący (490 p.)
0 głosów
0 odpowiedzi 233 wizyt
pytanie zadane 30 maja 2017 w C i C++ przez Huberti Gaduła (4,500 p.)
+3 głosów
1 odpowiedź 777 wizyt
pytanie zadane 22 października 2021 w C i C++ przez CrisGoldmann Nowicjusz (200 p.)

93,425 zapytań

142,421 odpowiedzi

322,646 komentarzy

62,786 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

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...