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.
Fórum › C / C++
Třída na jméno hráče
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/
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"
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
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) )
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Minecraft Plugin Připojení Hráče — založil dominikmiska00
Jméno servru — založil Borek
Uživatelské jméno — založil Decide
Jméno obráceně. — založil DeathHumanCZ
Jmeno presidenta — založil marek17
Moderátoři diskuze