Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz
  • 0

Nauka while


flajtrontri

Pytanie

Opublikowano

Witam. Jestem samoukiem c++, a porady i zadania biorę z tej strony: Kurs online . Pracuję aktualnie nad niemal banalnym zagadnieniem jak pętla while; do... while. Dla większości z Was to coś co jest jak układanie puzzli 4 elementy, ale dla osób nowych może stwarzać problemy zwłaszcza, gdy tekst czytany nie zawsze jest rozumiany.

 

Posiadam sobie taki kod do nauki:

#include "stdafx.h"
#include "iostream"
#include "string"
#define x "haslo1"

using namespace std;

int main()
{
	string y = "haslo1";
	cout << "Podaj haslo, by przejsc dalej!" << endl;
	cout << "Haslo:" << endl;
	
	while (y!=x)
	{
		cout << "Haslo nieprawidlowe!" << endl;
		cout << "Sprobuj ponownie!" << endl;
		cin >> y;
		cin.get();
		system("cls");
			
	}
	while (y == x)
	{
		cout << "Haslo poprawne!" << endl;
		cout << "Witamy!" << endl;
		cin >> y;
		cin.get();
		system("cls");
	}
		if (y == x);

	cin.get();
	return 0;
}

I nie wiem gdzie popełniłem błąd, gdyż chcę, by po błędnym wpisaniu hasła pętla wracała do ponownego jego wpisania, a po poprawnym kończyła program. Czy mógłby ktoś zamiast dawać gotowca powiedzieć gdzie powinienem spojrzeć i jakoś lepiej wytłumaczyć pętlę while? ew. polecić stronę, gdzie będzie to fajnie opisane. Z góry przepraszam za zbędny post, ale i dziękuję za zainteresowanie.

 

@Edit. Pozmieniałem, popróbowałem i mam takie coś:

 

int main()
{
	string y = "haslo1";
	cout << "Podaj haslo, by przejsc dalej!" << endl;
	cout << "Haslo:" << endl;
	
	do
	{
		
		cin >> y;
		system("cls");
		cout << "Haslo nieprawidlowe!" << endl;
		cout << "Sprobuj ponownie!" << endl;	
		cin.get();
			
	} while (y != x);
	do
	{
		cin >> y;
		system("cls");
		cout << "Haslo poprawne!" << endl;
		cout << "Witamy!" << endl;
		cin.get();
	} while (y == x);
	if (y==x)

	cin.get();
	return 0;
}

Teraz zapętla się w miarę prawidłowo, bo po wpisaniu złego hasła prosi o ponowne, a nie odtwarza je bez przerwy, ale... po wpisaniu poprawnego najpierw pisze, że jest złe, a potem po wpisaniu byle czego potwierdza hasło.

 

@Edit2:

Poradziłem sobie :D Działa jak powinno. Wybaczcie za spam na forum, ale staram się mimo wszystko poradzić z tym. Rozwiązanie moje to:


#include "stdafx.h"
#include "iostream"
#include "string"
#include "windows.h"
#define x "haslo1"
#define z Sleep(1000);

using namespace std;

int main()
{
	string y;
	cout << "Podaj haslo, by przejsc dalej!" << endl;
	z;
	cout << "Haslo:" << endl;
	
	do
	{
		cin >> y;
		system("cls");
		cout << "Haslo nieprawidlowe!" << endl;
		cout << "Sprobuj ponownie!" << endl;
			
	} while (y != x);
	system("cls");
	cout << "Logowanie..." << endl;
	z;
	cout << "3.." << endl;
	z;
	cout << "2.." << endl;
	z;
	cout<< "1.." << endl;
	z;
	system("cls");
	cout << "Haslo poprawne!" << endl << "Witamy!" << endl;
	cout << endl << "Wcisnij 'Enter' by kontunuowac..";
	cin.get();


	cin.get();
	return 0;
}

3 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

Opublikowano
string y = "haslo1";
string x;
bool tmp = true;
	
	while (tmp)
	{
		cout << "Podaj haslo, by przejsc dalej!" << endl;
		cout << "Haslo:" << endl;
		cin >> x;
		if(x==y) {
			tmp = false;
		} else {
			cout << "Haslo nieprawidlowe!" << endl;
			cout << "Sprobuj ponownie!" << endl;
		}
	}
		cin.get();
		system("cls");

 

Opublikowano

@PGS pętla while jest jak najbardziej tutaj odpowiednia jak i sprawdzanie czy x == y, w pierwszym kroku pętli x jest pusty, a y ma konkretną wartość, więc jedynie się różni jedynie ilością kroków.

Specjalista
Opublikowano

Z tego co widzę nie do końca to faktycznie rozumiesz. Petla się wykonuje dopóki podany warunek jest prawdziwy. Sprawdzanie czy x==y jest słabym pomysłem. Tutaj masz kod ode mnie i wyjaśnienie:

do
{
  	cout << "Podaj hasło: ";
	cin >> y;
	if(y==x)
    {
      cout << " Hasło się zgadza";
      break;
    }
 	else 
    {
      cout << "Hasło sie nie zgadza" << endl << "Sprobuj raz jeszcze" << endl;
    }
} while (true);

Pętla do while, z tego powodu gdyż chcę, żeby wykonała się przynajmniej raz. Popierwsze wczytuje podanę hasło przez użytkownika. Następnie porównuje dzięki if, czy są takie same, jeśli są to mówi o tym i przerywa działanie pętli. Gdy przerwie jej działanie, przejdzie do kolejnych lini po pętli. Jeśli hasło się nie zgadza mówi o tym, pętla nie zostaje przerwana a warunek jest prawdziwy, więc robi się od nowa. I znowu pobiera hasło itd...

 

 

Mam nadzieję, że trochę Ci przybliżyłem jej działanie.

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...