Válí se ti projekty v šuplíku? Dostaň je mezi lidi a získej cool tričko a body na profi IT kurzy v soutěži ITnetwork summer 2017!
Přidej si svou IT školu do profilu a najdi spolužáky zde na síti :)
Avatar
Mike057
Člen
Avatar
Mike057:23.2.2013 14:28

ahoj. poradite mi nekdo jak udelat toto?

mam stukturu:

struct namelist
        {
          char names[10][8];
          int scores[10];
        };

namelist scoreboard;

no a pak potrebuju udelat tohle:

scoreboard.names[0] = "jmeno";

nevite jak to ma byt spravne? takhle to nefunguje :( dekuji za odpovedi :)

 
Odpovědět 23.2.2013 14:28
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Mike057
David Čápka:23.2.2013 14:32

string má metodu ToCharArray. K čemu to potřebuješ?

Nahoru Odpovědět 23.2.2013 14:32
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Mike057
Člen
Avatar
Mike057:23.2.2013 14:33

jo este doplnim ze nepouzivam string protoze potrebuju aby ta struktura mela nemenou velikost.

no je to tabulka score a ja pak celou tu strukturu ukladam do souboru... proto potrebuju aby se nemenila veikost s bytech. kvuli nacitani

Editováno 23.2.2013 14:34
 
Nahoru Odpovědět 23.2.2013 14:33
Avatar
Mike057
Člen
Avatar
Odpovídá na David Čápka
Mike057:23.2.2013 14:38

a jak ta metoda funguje? me ji to vubec nenabidne :( a kdyz ji tam napisu tak to vyhodi chybu

 
Nahoru Odpovědět 23.2.2013 14:38
Avatar
 
Nahoru Odpovědět 23.2.2013 14:38
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Mike057
David Čápka:23.2.2013 14:39

To vymýšlíš nějakou prasárnu. Zaprvé string jde normálně serializovat do binárního souboru a zadruhé je vhodnější použít např. XML.

Jo až teď jsem si všiml že to není C# :D Si udělej metodu co ti převede string na pole znaků.

Editováno 23.2.2013 14:40
Nahoru Odpovědět 23.2.2013 14:39
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Mike057
Člen
Avatar
Mike057:23.2.2013 14:46

c++ :D no asi mi nic jinyho nezbyde :/

 
Nahoru Odpovědět 23.2.2013 14:46
Avatar
Odpovídá na Mike057
Lukáš Hruda (Luckin):23.2.2013 14:57

Můžeš místo = používat funkci strcpy, ta ti překopíruje řetězec tam kam potřebuješ. Pokud to chceš dělat pohodlněji, tak si pro ten řetězec udělej třídu, která bude používat statický pole o velikosti kterou potřebuješ pro uložení toho řetězce a pak jí stačí přetížit operátor = tak, aby ti ten řetězec překopíroval přesně jak potřebuješ.

 
Nahoru Odpovědět 23.2.2013 14:57
Avatar
Odpovídá na Mike057
Lukáš Hruda (Luckin):23.2.2013 15:19
class Name
{
  private:
    static const int size = 8;
    char name[size];

  public:
    Name(){}
    Name(char*);
    const Name & operator=(char*);
    char & operator[](int i){return name[i];}
    operator char*(){return name;}
};

Name::Name(char* str)
{
  int i;
  for(i=0;i<size-1 && i<strlen(str);i++)
    name[i] = str[i];
  name[i] = '\0';
}

const Name & Name::operator=(char* str)
{
  int i;
  for(i=0;i<size-1 && i<strlen(str);i++)
    name[i] = str[i];
  name[i] = '\0';
  return *this;
}

A pak napíšeš:

struct namelist
{
  Name names[10];
  int scores[10];
};

namelist scoreboard;

scoreboard.names[0] = "jmeno";  //tohle ale musí být uvnitř funkce
 
Nahoru Odpovědět  +1 23.2.2013 15:19
Avatar
Mike057
Člen
Avatar
Odpovídá na Lukáš Hruda (Luckin)
Mike057:23.2.2013 16:15

Parada dekuju moc to je presne ono co sem potreboval :)

 
Nahoru Odpovědět 23.2.2013 16:15
Avatar
Odpovídá na Mike057
Lukáš Hruda (Luckin):23.2.2013 16:53

Nemáš za co...

 
Nahoru Odpovědět 23.2.2013 16:53
Avatar
Mike057
Člen
Avatar
Mike057:23.2.2013 17:34

tak mam este jeden problem :/ nemuzu to zaboha vypsat

string jmeno = scoreboard.names[0];

textprintf_ex(buffer,font_names_xs,x+8,y+38,makecol(255,153,0),-1,"%s",jmeno);

tohle vyhazuje chybu. zniceho nic promena jmeno nic neobsahuje ale kdyz zmenim %s na %d tak to normal vzpise ale jak cisla :/

 
Nahoru Odpovědět 23.2.2013 17:34
Avatar
Odpovídá na Mike057
Lukáš Hruda (Luckin):23.2.2013 17:55

Ta třída nemá definovanou konverzi na string. Ale má definovanou konverzi na char*, takže buďto můžeš dosadit rovnou scoreboard.names[0] do textprintf_ex, nebo změň string na char*. Nehledě na to že textprintf_ex může jako parametr přebírat char*, ale jelikož je to Céčková funkce a v C nexistuje string a zároveň string nemá definovanou konverzi na char*, tak do textprintf_ex vůbec nemůžeš dávat string.

 
Nahoru Odpovědět 23.2.2013 17:55
Avatar
Mike057
Člen
Avatar
Mike057:23.2.2013 18:04

:D aha no kdyz tam dam rovnou scoreboard.names[0] tak to stejne vyhodi chybu... a jestli to neumi string tak co tam mam zdat za to % ?

 
Nahoru Odpovědět 23.2.2013 18:04
Avatar
Mike057
Člen
Avatar
Odpovídá na Lukáš Hruda (Luckin)
Mike057:23.2.2013 18:07

aha uz to mam sem uplne pitomej :D dik moc

 
Nahoru Odpovědět 23.2.2013 18:07
Avatar
Odpovídá na Mike057
Lukáš Hruda (Luckin):23.2.2013 18:12

Normálně %s, v C se stringem myslí pole znaků ke kterýmu se přistupuje přes char*, v C++ vlastně taky, string neni základní datovej typ. A co to hází za chybu??

 
Nahoru Odpovědět 23.2.2013 18:12
Avatar
Mike057
Člen
Avatar
Odpovídá na Lukáš Hruda (Luckin)
Mike057:23.2.2013 20:10

no accesvolation ci jak se to pise... a kdyz sem se kouknul na promeny ty struktury tak to psalo ze neplatnej ukazatel... nicmene kdyz se to udela bez toho s a da se to tam rovnou tak to funguje :)

 
Nahoru Odpovědět 23.2.2013 20:10
Avatar
Odpovídá na Mike057
Lukáš Hruda (Luckin):23.2.2013 20:48

I přes to %s to funguje, jenom to musíš explicitně přetypovat, (char*)scorebo­ard.names[0]. Alespoň u printf to funguje, v allegru by mělo taky.

 
Nahoru Odpovědět 23.2.2013 20:48
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 18 zpráv z 18.