» »

[naloga][c++] problem

[naloga][c++] problem

ROK1a ::

Imam nek osnovni meni:
Igralec 1 vnesi svoje ime: rok
Igralec 2 vnesi scoje ime: macro
rok izberi znak za igro (x/o): x

nato mi izpise:
rok je izbral znak X. Xacro automaticno dobi znak O.

Zakaj mi pri imenu drugega igralca prvo črko(m) zamenja z znakom(X) prvega igralca?

KODA:

int main()
{
	char krozec='O', krizec='X', ime1[30], ime2[30], znak1[1], znak2[1];

	// osnovni menu
	cout << "Igralec 1 vnesi svoje ime: ";
	cin >> ime1;
	cout << "Igralec 2 vnesi svoje ime: ";
	cin >> ime2;

    znak:
    system("cls");
    cout << ime1 << " izberi si znak za igro <x/o>: ";
    cin >> znak1;
   	if (strcmp(znak1,"x") == 0 || strcmp(znak1,"X") == 0)
    {
       znak1[1] = krizec;
       znak2[1] = krozec;
    }
    else if (strcmp(znak1,"o") == 0 || strcmp(znak1,"O") == 0)
    {
         znak1[1] = krozec;
         znak2[1] = krizec;
    }
    else
    {
        goto znak;
    }
    cout << ime1 << " je izbral " << znak1 << ". " << ime2 << " automaticno dobi znak " << znak2 << endl;
	system("pause");
	return 0;
}

Quikee ::

char krozec='O', krizec='X', ime1[30], ime2[30], znak1[1], znak2[1];

Ni pametno deklarirat spremenljivk na tak način, daj vsako v svojo vrstico. Kaj je smisel znak1[1] - to je polje z enim elementom, kar je (skoraj) isto kot da napišeš le char znak1; V nadaljevanju se sklicuješ na znak1[1] samo v C++ se začne z 0 (offset), torej znak1[0], če že. To je možno, da tudi razlog za tak izpis.

Goto ? Raje uporabi while oz do.. while stavek.

ROK1a ::

PRVIČ: v primeru, da dam char znak1; brez [1] mi izpiše error v vrstici kjer uporabim:
if (strcmp(znak1,"x") == 0 || strcmp(znak1,"X") == 0)

DRUGIČ: če pa se sklicujem na znak1[0] in znak2[0]
mi vseeno pomeša znake.

Quikee ::

Potem pa deklariraj kot znak1[2] in se sklicuj na znak1[0]. Polje pa se prej postavi na 0. Polje 2 charov je potrebno zaradi "null-termination" znaka na koncu.

Lahko pa bi primerjal direkt znake z if (znak1 == krizec), če bi oba bila deklarirana kot char in ne polje char-ov.

Zgodovina sprememb…

  • spremenil: Quikee ()

Quikee ::

int main()
{
	char krozec='O', krizec='X', ime1[30], ime2[30], znak1, znak2;
	// osnovni menu

	cout << "Igralec 1 vnesi svoje ime: ";
	cin >> ime1;
	cout << "Igralec 2 vnesi svoje ime: ";
	cin >> ime2;

znak:

cout << ime1 << " izberi si znak za igro <x/o>: ";
cin >> znak1;
	if (znak1 == krizec)
	{
		znak1 = krizec;
		znak2 = krozec;
	}
	else
	{ 
		if (znak1 == krozec)
		{
			znak1 = krozec;
			znak2 = krizec;
		}
		else
		{
			goto znak;
		}
	}

	cout << ime1 << " je izbral " << znak1 << ". " << ime2 << " automaticno dobi znak " << znak2 << endl;

	return 0;
}

ROK1a ::

problem sem rešil z prejšnjim predlogom, toda ponudil si mi lažjo rešitev. TNX.

OwcA ::

Če je to C++, čemu potem uporabljaš abotna polja char-ov namesto std::string?
Otroška radovednost - gonilo napredka.

DejaVu ::

to je vse dosti lazje naredit v Cju. ne rabis C++ za tako nalogo.

btw, uporabi lstrcmpi namesto strcmp, in ti ne bo treba pazit na case.

OwcA ::

Zakaj bi bilo to lažje narediti v C-ju? Ali karkoli drugega, ko smo že pri tem.
Otroška radovednost - gonilo napredka.

StajercSSS ::

Apj...apj...Jaz se zaj mantram z nekimi povprečji... hehe... :D
Voziš se v formuli, pred tabo je podmornica, za tabo pa vesoljska ladja.
Kako se rešiš iz te situacije?
Rečeš ciganu naj ustavi vrtiljak.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

pomoč matematika - kombinatorika!

Oddelek: Šola
101283 (947) technolog
»

Kalkulator

Oddelek: Programiranje
111315 (1082) lebdim
»

[C#] Preprost račun

Oddelek: Programiranje
81165 (889) darkkk
»

[c] Enaki datoteki

Oddelek: Programiranje
71033 (893) Spura
»

[C++] - Tolmačenje povedi in izvedba operacij nad števkami

Oddelek: Programiranje
353343 (2579) jernejl

Več podobnih tem