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

Ulepszenie kodu

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
+1 głos
190 wizyt
pytanie zadane 9 lutego 2021 w C i C++ przez Sk66 Nowicjusz (130 p.)

Cześć, forumowicze :)

Jestem świeżakiem. Piszę z zapytaniem o rady/sugestie, co mógłbym zmienić/dodać w kodzie, aby ulepszyć jego działanie oraz sprawić by sam program wyglądał estetyczniej.

Przedstawiony kod to "Koło fortuny". 

W zadaniu tym musiałem:

- zdefiniować stałą tablicę dziesięciu jednowyrazowych haseł,

- program ma wybrać losowe hasło,

- wyświetlić, ile liter ma hasło,

- w następnym kroku użytkownik podaje litery,

- jeśli poda wszystkie litery hasło, ma zostać wyświetlone hasło oraz ilość prób,

- na koniec wygrana opisana w warunku, na końcu kodu.

 

#include <iostream>
#include <conio.h>
#include <ctime>
using namespace std;

int main()
{
    srand(time(NULL));
    string wyrazy[10] = {"kostka", "pomidor", "komputer", "radio", "kosmos",
                         "planeta", "makowiec", "marchewka", "czapka", "sportowiec"};
    int x = 0;
    int numer = rand() % 10;
    string wybrany = wyrazy[numer];
    bool zgadniete[wybrany.length()];
    bool gra = true;

    for (int i = 0; i < wybrany.length(); i++)
    {
        zgadniete[i] = false;
    }

    cout << "Dlugosc slowa: " << wybrany.length() << endl;

    while (gra)
    {
        int help = 0;
        for (int i = 0; i < wybrany.length(); i++)
        {
            if (zgadniete[i])
            {
                cout << wybrany[i];
                help++;
            }
            else
            {
                cout << "_";
            }
        }
        if (help == wybrany.length())
        {
            gra = false;
            break;
        }
        cout << endl
             << "podaj litere: ";
        char o;
        cin >> o;
        cout << endl;
        bool trafiono = false;
        for (int i = 0; i < wybrany.length(); i++) {
            if (wybrany.at(i) == o) {
                zgadniete[i] = true;
                trafiono = true;
            }
        }
        if (!trafiono) {
            x+=1;
        }
    }
    cout << endl;
    cout << "Haslo to: " << wybrany << endl
         << "Ilosc prob: " << x << endl;

    if (x <= 5)
    {
        cout << "Wygrales 10 000";
    }
    else if (x > 5 && x <= 10)
    {
        cout << "Wygrales 1 000";
    }
    else
    {
        cout << "Niestety, nic nie wygrales";
    }

    return 0;
}

 

Pozdrawiam cieplutko :)

2 odpowiedzi

+1 głos
odpowiedź 9 lutego 2021 przez j23 Mędrzec (195,220 p.)

Linia 14: to nie jest prawidłowa definicja tablicy w C++. Użyj klasy std::vector albo po prostu stringa.

Linie 50-55: std::string to klasa, która ma różne pomocne metody, w tym metodę find - użyj jej

0 głosów
odpowiedź 17 lutego 2021 przez VBService Ekspert (255,840 p.)
edycja 17 lutego 2021 przez VBService

Propozycja w oparciu o sugestie @j23  wink

#include <iostream>
#include <ctime>
using namespace std;

int main()
{
	srand(time(NULL));
	
	string words[10] = { 
                         "kostka", "pomidor", "komputer", "radio", "kosmos",
                         "planeta", "makowiec", "marchewka", "czapka", "sportowiec"
                       };
	                         
	int random_index = rand()%10;
	int word_guess_length = words[random_index].length();
	string word_to_guess = words[random_index];
	string guessed_letters = string(word_guess_length, '-');
	
	cout << "Dlugosc slowa: " << word_guess_length << " liter" << endl;
	
	int number_of_failed_attempts = 0; // liczba nieudanych prób
	char letter;
	
	while (word_guess_length != 0) {
		cout << "Podaj litere: ";
		 cin >> letter;
		 
		 int next_letter = 0;
		 while (true) {
    		 size_t found = word_to_guess.find(letter, next_letter);
    		 if (found != string::npos) {
    		     guessed_letters[found] = letter;
    		     next_letter = found + 1;
    		     word_guess_length--;
    		 } else
    		     break;
		 }
		 
		 if (next_letter == 0) number_of_failed_attempts++;
		 if (word_guess_length != 0) cout << guessed_letters << endl; 
	}
	
	cout << "\nHaslo to: " << word_to_guess
	     << "\nIlosc nieudanych prob: " << number_of_failed_attempts << endl;
	     
	switch (number_of_failed_attempts) {
	    case 0 ... 5:
	        cout << "Wygrales 10 000";
	        break;
	    case 6 ... 10:
	        cout << "Wygrales 1 000";
	        break;
	    default:
	        cout << "Niestety, nic nie wygrales";
	}
	
	return 0;
}

string::find ]  [ repeat a string a variable number of times c++? ]
How do I select a range of values in a switch statement? ]

Podobne pytania

0 głosów
1 odpowiedź 109 wizyt
pytanie zadane 3 marca 2021 w Sprzęt komputerowy przez Debesciak Nowicjusz (150 p.)
0 głosów
1 odpowiedź 268 wizyt
pytanie zadane 26 sierpnia 2020 w Sprzęt komputerowy przez MateoPB Nowicjusz (120 p.)
0 głosów
0 odpowiedzi 213 wizyt

93,103 zapytań

142,077 odpowiedzi

321,570 komentarzy

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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...