"oczko"

0

Cześć i witam
Próbuję napisać program, symulujący gre oczko i mam pewien problem.

// ConsoleApplication2.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <stdio.h>
#include <math.h>
#include <iostream>
#include <time.h>

using namespace std;

int main()
{
	int A;
	srand(time(NULL));
	A = rand() % 11;
	printf("Twoja pierwsza liczba: %d\n", A);
	int B;
	B = A + rand() % 11;
	printf("Pierwsze losowanie: %d\n", B);
	printf("Wylosowac kolejna liczbe?\n");
	char x;
	scanf_s("%c", &x);
	if (x = 'T')
	{
		int C;
		C = B + rand() % 11;
		printf("Wynik po dobraniu: %d\n", C);
	}
	else (x = 'N')
	{
		printf("Koniec gry, wynik: %d\n", B);
	}
	
	return 0;
}

nie chce mi skompilować, w wyjasnieniu problem pojawia się przy komendzie if/else
co może być źle?

1
if (x = 'T')

Przypisanie zamiast porównania. Operatorem porównania jest ==.

1

Dodam jeszcze że jeżeli chcesz mieć warunek przy else to musisz wpisać if. Czyli:

if (x == 'T')
{
	int C;
	C = B + rand() % 11;
	printf("Wynik po dobraniu: %d\n", C);
}
else if(x == 'N') // <- Tutaj
{
	printf("Koniec gry, wynik: %d\n", B);
}
0

coś jeszcze nie chce balangać, podanie t, lub n nie ma wpływu na wynik.

0

Pytanie - podajesz t czy T? Bo jest to ważne. U mnie ten kod działa (oczywiście po poprawach).

0
atmal napisał(a):

Pytanie - podajesz t czy T? Bo jest to ważne. U mnie ten kod działa (oczywiście po poprawach).
Mi też działa, lecz musiałem dodać jeszcze komendę fgets. Jak tutaj :

char x [10];
printf("> t/n: ");
fgets(x, 10, stdin);
if (x [0] == 't')
{
int C;
C = B + rand() % 11;
printf("Wynik po dobraniu: %d\n", C);
if (C < 21);
{

0

teraz pytanie jak mógłbym to zakończyć. Program na tym etapie wygląda tak:
// ConsoleApplication2.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <stdio.h>
#include <math.h>
#include <iostream>
#include <time.h>

using namespace std;

int main()
{
int A;
srand(time(NULL));
A = rand() % 11;
printf("Twoja pierwsza liczba: %d\n", A);
int B;
B = A + rand() % 11;
printf("Pierwsze losowanie: %d\n", B);
printf("Wylosowac kolejna liczbe?\n");
char x [10];
printf("> t/n: ");
fgets(x, 10, stdin);
if (x [0] == 't')
{
int C;
C = B + rand() % 11;
printf("Wynik po dobraniu: %d\n", C);
if (C < 21);
{
printf("Dobrac liczbe?\n");
printf("> t/n: ");
fgets(x, 10, stdin);
if (x[0] == 't')
{
int D;
D = C + rand() % 11;
printf("Wynik po dobraniu: %d\n", D);
if (D < 21);
printf("Dobrac liczbe?\n");
printf("> t/n: ");
fgets(x, 10, stdin);
if (x[0] == 't')
{
printf("Wynik po dobraniu: %d\n", C);
}

		}

	}
}
else if (x [0] == 'n')
{
	printf("Koniec gry, wynik: %d\n", B);
}

return 0;

}

Chodzi mi o to, żeby po przekroczeniu 21 wyskakiwał błąd, przekroczenia, a przed 21 aby można było dobierać.

0

Popatrz na ten kawałek kodu:

printf("Wylosowac kolejna liczbe?\n");
	char x[10];
	printf("> t/n: ");
	fgets(x, 10, stdin);
	if (x[0] == 't')
	{
		/* Tu trochę kodu */
		if (C < 21);
		{
			printf("Dobrac liczbe?\n");
			// ...
			if (x[0] == 't')
			{
				// ...
				printf("Dobrac liczbe?\n");
				if (x[0] == 't')
				{
					printf("Wynik po dobraniu: %d\n", C);
				}

Powtarza się, co nie? I tak nie powinno być. Musisz być leniwym, nie klepać ciągle tego samego.

Jeżeli nie potrzebujesz przetrzymywać wylosowane liczby osobno (tak aby móc je później np. wyświetlić) to spokojnie 1 zmienna wystarczy.

Na szybko sklepałem coś takiego:

int main()
{
	int sum;

	srand(time(NULL));
	sum = rand() % 11;

	char userInput[10]; // Zamiast "tajemniczego" x
	do // Do-while wykona się przynajmniej raz
	{
		printf("Wynik: %d\n", sum);
		printf("Wylosowac kolejna liczbe?\n");
		printf("> t/n: ");
		fgets(userInput, 10, stdin);
		if (userInput[0] == 'n')
		{
			break; // Wyjście z pętli
		}

		sum += rand() % 11;
	} while (sum <= 21);

	if (sum > 21) // Jeżeli użytkownik ma więcej niż 21 punktów 
	{
		printf("Nie udalo sie, wynik: %d\n", sum);
	}
	else // A w przeciwnym razie oznacza to że sam zakończył grę.
	{
		printf("Koniec. Wynik: %d\n", sum);
	}

	system("pause"); // "Wciśnij jakikolwiek klawisz aby zakończyć"
	return 0; // To już jest przestarzałe
}

Wydaję mi się że o to chodzi.

0

Dzięki kolego :)

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