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

Program dodaje nowy napis do starego

Cloud VPS
0 głosów
203 wizyt
pytanie zadane 15 stycznia 2018 w C i C++ przez Mick_SQ6IYV Obywatel (1,020 p.)

Witam!

Zadaniem programu jest "odgadnąć" hasło wprowadzone przez użytkownika. Użytkownik wprowadza napis składający się z określonej liczby liter, a komputer losuje zadaną ilość znaków i sprawdza, czy udało mu się wylosować to, co wpisał użytkownik. Wszystko fajnie, tylko program do wylosowanego (w poprzedniej próbie) napisu "dokleja" mi nowo utworzoną kombinację liter. Najchętniej kazałbym programowi za każdym razem kasować stary napis po sprawdzeniu jego poprawności.

#include <iostream>
#include <cstdlib>
#include <windows.h>
#include <time.h>

using namespace std;

string generator();

int liczba_podejsc=0, liczba_znakow=3;
string napis, haslo;

int main(int argc, char** argv) 
{
	srand(time(NULL));
	cout << endl << " Podaj mi jakies slowo (skladajace sie z 3 znakow): ";
	cin >> haslo;
	do
	{
		system("cls");
		generator();
		liczba_podejsc++;
		cout << endl << " " << liczba_podejsc << ". Podano: " << haslo << ". Wylosowano: " << napis << endl;
		Sleep(50);	
	}
	while(haslo!=napis);
	cout << " Odgadlem Twoje haslo w " << liczba_podejsc << " probie! :)" << endl;
	system("pause");
	return 0;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////
string generator()
{
	int liczba;
	char znaki[26]={'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};
	for(int i=1; i<=liczba_znakow; i++)
	{
		liczba=(rand()%26)+1;
		napis+=znaki[liczba];
		i++;
	}
	return napis;
}

 

1
komentarz 15 stycznia 2018 przez draghan VIP (106,230 p.)

Najchętniej kazałbym programowi za każdym razem kasować stary napis po sprawdzeniu jego poprawności.

A więc tak zrób. ;)

1 odpowiedź

+2 głosów
odpowiedź 15 stycznia 2018 przez niezalogowany
wybrane 15 stycznia 2018 przez Mick_SQ6IYV
 
Najlepsza

Po co kasować stary napis jak można modyfikować jego elementy? ;)

#include <iostream>
#include <cstdlib>
#include <string>
#include <windows.h>
#include <time.h>
using namespace std;

void generator(string& napis);

int main(int argc, char** argv)
{
	srand(time(NULL));
	int liczba_podejsc = 0, liczba_znakow = 3;
	string napis, haslo;
	
	cout << endl << " Podaj mi jakies slowo: ";
	cin >> haslo;

	if (haslo.length() != liczba_znakow)
	{
		cerr << "\nBlad krytyczny! Podano slowo o nieodpowiedniej dlugosci!";
		return -1;
	}

	napis.resize(liczba_znakow); 
	/*
	funkcja generator generuje przypadkowe wartosci dla kazdego elementu
	wiec powinien miec taki sam rozmiar jak haslo
	*/

	do
	{
		system("cls");
		generator(napis);
		liczba_podejsc++;
		cout << endl << " " << liczba_podejsc << ". Podano: " << haslo << ". Wylosowano: " << napis << endl;
		Sleep(50);
	} while (haslo != napis);

	cout << " Odgadlem Twoje haslo w " << liczba_podejsc << " probie! :)" << endl;
	system("pause");
}

void generator(string& napis)
{
	const static int ile_liter = 'z' - 'a' + 1;
	for (int i = 0; i < napis.length(); i++)
	{
		napis[i] = 'a' + rand() % ile_liter;
	}
}
komentarz 15 stycznia 2018 przez Mick_SQ6IYV Obywatel (1,020 p.)
Super, zadziałało:) Dziękuję bardzo za pomoc:)

Podobne pytania

0 głosów
1 odpowiedź 1,410 wizyt
0 głosów
2 odpowiedzi 1,703 wizyt
pytanie zadane 14 sierpnia 2019 w C i C++ przez Mavimix Dyskutant (8,420 p.)
+2 głosów
3 odpowiedzi 1,160 wizyt

93,487 zapytań

142,423 odpowiedzi

322,773 komentarzy

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

Kursy INF.02 i INF.03
...