Třída na jméno hráče – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Třída na jméno hráče – C / C++ – Fórum – Programujte.comTřída na jméno hráče – C / C++ – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
Apik0
Duch
29. 6. 2009   #1
-
0
-

Zdravím dneska po druhé, mám další perličku:-)

mám třídu Player:

##
Soubor: Player.h
##
class Player
{
public:
Player();
~Player();
char getPlayer();
void setPlayer(char name);
private:
char playerName;
};
##
Soubor: Player.cpp
##
#include <iostream>
#include "Player.h"

Player::Player() {}
Player::~Player() {}

char Player::getPlayer()
{
return playerName;
}

void Player::setPlayer(char name)
{
playerName = name;
}
##

Potřeboval bych změnit tuhle funkci, aby bylo možno uložit jméno uživatele do proměnný, potom co se uživatel k tomu bude vyzván. Já jsem se snažil změnit playerName na pole char playerName[16], ale vždy byla někde chyba, se kterou jsem nevěděl co s ní. Pole na jméno do 16 písmen.

Další otázka zda-li je možné omezit cin přímo v konzoli, že nebude uživatel schopen psát dál? Napíše tedy max 16 znaků a dál už se nic objevovat nebude.

Nahlásit jako SPAM
IP: 213.220.225.–
Reklama
Reklama
bukaj_0010
Věrný člen
29. 6. 2009   #2
-
0
-

Apik
Když už používáš C++, tak zkus std::string[1], či si sežeň nějakou jinou ,,chytrou`` implementaci řetězců v C++. Jinak pole může překopírovat pomocí strcpy()[2], resp. strncpy()[3].

Další otázka zda-li je možné omezit cin přímo v konzoli, že nebude uživatel schopen psát dál? Napíše tedy max 16 znaků a dál už se nic objevovat(!) nebude.
Se std::string budeš mít délku řetězce omezenou pouze velikostí dostupné operační paměti.

[1] http://cplusplus.com/reference/string/string/
[2] http://cplusplus.com/reference/clibrary/cstring/strcpy/
[3] http://cplusplus.com/reference/clibrary/cstring/strncpy/

Nahlásit jako SPAM
IP: 88.101.128.–
Jak se správně ptát? -> http://www.hash.cz/inferno/otazky.html[br][br] Po programování je člověk hladovej.
Apik0
Duch
29. 6. 2009   #3
-
0
-

zkoušel jsem to změnit na tohle:

const int cNameLength = 16;
char playerName[cNameLength];
char nameLength[cNameLength];
std::cin >> nameLength[cNameLength];
strncpy(playerName, nameLength, cNameLength);

kompilace mi projde, ale když vložím nějaký text, chodí mi to chybu...

"Stack around the variable 'nameLength' was corrupted"

Nahlásit jako SPAM
IP: 213.220.225.–
Quiark0
Věrný člen
30. 6. 2009   #4
-
0
-

Nic proti, ale ten kód vypadá, jako by ho napsal nějaký náhodný generátor :) Fakt radši použit ten std::string, ulehčí ti to práci. Pro omezení vstupu zkus



string x;
cin.getline(x, 16);

Nahlásit jako SPAM
IP: 193.86.140.–
Apik0
Duch
30. 6. 2009   #5
-
0
-

když to udělám přes ten string, tak mi to chodí tuhle chybu:

Error 1 error C2664: 'std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::getline(_Elem *,std::streamsize)' : cannot convert parameter 1 from 'std::string' to 'char *' c:\documents and settings\... 19

Nahlásit jako SPAM
IP: 213.220.225.–
Datlik0
Návštěvník
1. 7. 2009   #6
-
0
-

asi se zas pletu ale neni potreba pro string hlavicka



#include <cstring>
nebo
#include <string.h>

Nahlásit jako SPAM
IP: 85.13.98.–
nikto
~ Anonymní uživatel
24 příspěvků
1. 7. 2009   #7
-
0
-

To Apik : Nejde ti to lebo istream::getline() zapisuje do char * a string sam seba na char prerobit nevie
na to existuje globalna funkcia getline, ktoru pouzijes takto:

#include <string>

/*...*/
string s;
getline(cin, s)


A nemusis sa starat ani o dlzku retazca (ale keby to chces obmedzit tak je pretazena, getline(istream&, string&, int) )

Nahlásit jako SPAM
IP: 217.118.98.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 71 hostů

Podobná vlákna

Minecraft Plugin Připojení Hráče — založil dominikmiska00

Jmeno presidenta — založil marek17

Jméno servru — založil Borek

Uživatelské jméno — založil Decide

Jméno obráceně. — založil DeathHumanCZ

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý