Licznik błedow - problem [C]

0

Cześć ! Mam problem z dokończeniem zadania. Jego treść brzmi następująco: Napisz prostą grę w odgadywanie hasła.Hasło powinno być przechowywane w tablicy, a użytkownik powinien je odgadywać .W przypadku trzech nie trafionych znaków z rzędu gra powinna zostać zakończona porażką.
Udało mi się napisać praktycznie całość - wszystko z wpisywaniem i "zgadywaniem działa". Problem pojawia się z dodaniem licznika błedów. Zgodnie z poleceniem po trzech nieudanych próbach program powinien kończyć działanie, u mnie wyglada to tak,że w przypadku jednorazowego wpisania litery,ktora nie zawiera się w haśle program kończy działanie. Natomiast jeśli wpisuje tylko litery zawarte w hasle - wszystko ok. Pytanie - Co robie źle - gdzie powinienem umieścić licznik ? Bardzo prosze o pomoc !
Kod:

#include <stdio.h>
#include <stdlib.h>

char haslo[7] = { 'p', 'r', 'o', 'g', 'r', 'a', 'm' }, pola[7] = { '_', '_', '_', '_', '_', '_', '_' }, n;
int i = 0, j = 0, k = 0, m = 0;
int wynik, index, licznik;

int main(void)
{
    printf("\n Zgadnij haslo ! Aby to zrobic wprowadzaj dowolne litery z klawiatury!\nPowodzenia ! \n");
    do {
        n = getch();

        for (i; i < 7; i++) {
            if (n == haslo[i]) {
                pola[i] = haslo[i];
                licznik = 0;
            }
            else if (n != haslo[i]) {
                licznik++;
            }
        }

        wynik = 0;
        for (index = 0; index < 7; ++index) {
            if (haslo[index] == pola[index]) {
                ++wynik;
                licznik = 0;
            }
        }
        if (wynik == 7) {
            printf(haslo);
            printf("\n Gratuacje ! Zgadles!\n");
            system("pause");
            exit(0);
        }

        for (j; j < 7; j++)
            printf("%c", pola[j]);
        printf("\n");
        j = 0;
        i = 0;

    } while (licznik < 3);

    printf("\n\n");
    system("PAUSE");
}

0

W pętli w której sprawdzasz czy podany znak jest odgadnięty ustawiasz sobie flagę jakąś, zadeklarowaną wcześniej. Po pętli sprawdzasz i jeśli flaga została ustawiona (zmieniona wartość w porównaniu do tej sprzed pętli) to zwiększasz licznik.

0

Uwaga pisano z palca

int main(void)
{
	char pass[]="program";
	const size_t passSize=sizeof(pass);
	int counter=0;
        for(;;)
	{
		for(size_t i=0;i<passSize;++i) printf("%c",('a'<=pass[i])&&(pass[i]<='z')?'_':pass[i]);
		printf("\n");
		char n=toupper(getch());
		int found=0,winner=1;
		for(size_t i=0;i<passSize;++i)
		{
			if(n==toupper(pass[i]))
			{
				pass[i]=toupper(pass[i]);
				found=1;
			}
			if(('a'<=pass[i])&&(pass[i]<='z')) winner=0;
		}
		if(winner) break;
		if(found) counter=0; 
		else if(++counter>=3) break;
	}
	if(winner) printf("You win!\n");
	else printf("You loose\n");
	return 0;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1