IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

Diskusia – 13. diel - Funkcie s variabilným počtom a Typo argumentovať (stdarg.h)

Späť

Upozorňujeme, že diskusie pod našimi online kurzami sú nemoderované a primárne slúžia na získavanie spätnej väzby pre budúce vylepšenie kurzov. Pre študentov našich rekvalifikačných kurzov ponúkame možnosť priameho kontaktu s lektormi a študijným referentom pre osobné konzultácie a podporu v rámci ich štúdia. Toto je exkluzívna služba, ktorá zaisťuje kvalitnú a cielenú pomoc v prípade akýchkoľvek otázok alebo projektov.

Komentáre
Avatar
tomisoka
Tvůrce
Avatar
tomisoka:19.2.2015 18:08

Co ti není jasné na tom "fmt"?

(v tom tvém miniprintf)
Procházíš znak po znaku a pokud narazíš na 's', 'd' nebo 'c' tak vypíšeš další argument.
(v printf)
Procházíš znak po znaku a vypisuješ je, pokud narazíš na '%' tak načteš co je za ním a podle toho vypíšeš další argument.

Jinak tak jak jsi to napsal tak stačí:

miniprintf("dcs", i, c, s);

Ty ostatní znaky pro tu funkci nic neznamenají.

 
Odpovedať
19.2.2015 18:08
Avatar
Odpovedá na tomisoka
Libor Šimo (libcosenior):19.2.2015 18:17

Skúšal som tam použiť iný pointer, napr. *mmm a to nefungovalo, teda *fmt musí mať preddefinované miesto v pamäti aj s nejakými parametrami a tie ma zaujímajú.

Odpovedať
19.2.2015 18:17
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
tomisoka
Tvůrce
Avatar
Odpovedá na Libor Šimo (libcosenior)
tomisoka:19.2.2015 18:37

To je divné, dělal jsem si dřív vlastní printf a normálně mi to funguje s *c:

void myprintf(char *c, ...){
  va_list args;
  va_start(args, c);
  int i=0;
  while(*c){
    if(*c=='%'){
      *c++;
      switch(c[i]){
      case '%':
        putchar(c[i]);
        break;
      case 'd':
        printf("%d",va_arg(args, int32_t));
        break;
      case 'c':
        putchar((char)va_arg(args, uint32_t));
        break;
      case 's':
        printf("%s",va_arg(args, char*));
        break;
      case 'x':
      case 'X':
        printf("%X",va_arg(args, uint32_t));
        break;
      }
    }else{
      putchar(*c);
    }
    *c++;
  }
  va_end(args);
}

int main(){

  myprintf("test %s %c %d %X\n", "hoj!", 'c', 42, 123333);
  return 0;
}

(pro rejpaly : v původní funkci jsem samozřejmě nepoužíval na výpis printf, ale vlastní funkce)

 
Odpovedať
19.2.2015 18:37
Avatar
Odpovedá na tomisoka
Libor Šimo (libcosenior):19.2.2015 18:44

Skúšal si v case použiť aj iné písmená ako sú predpísané?
napr. case 'z':

Editované 19.2.2015 18:45
Odpovedať
19.2.2015 18:44
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
tomisoka
Tvůrce
Avatar
Odpovedá na Libor Šimo (libcosenior)
tomisoka:19.2.2015 18:49

Ano, zkoušel, nějak mě nenapadá žádný důvod proč by to nefungovalo.

 
Odpovedať
19.2.2015 18:49
Avatar
Libor Šimo (libcosenior):19.2.2015 18:51

Proste mi tam niečo nešlo, ale ako som písal v článku, nemám to úplne preskúmané, tak sa môžem mýliť.

Odpovedať
19.2.2015 18:51
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Raiper34
Tvůrce
Avatar
Raiper34:21.2.2015 20:31

Toto sme vyuzivali, ked sme robili nas Pascal interpreter na to aby sme mohli premeny pocet prvkov hadzat do nasho stacku :P

Odpovedať
21.2.2015 20:31
Posledná vydaná hra: http://www.islandsoft.cz/index.php?art=hra-akcna-space-resistance
Avatar
David Novák
Tvůrce
Avatar
Odpovedá na Raiper34
David Novák:21.2.2015 20:41

Nejsi náhodou druhák na VUT FIT? :D

Odpovedať
21.2.2015 20:41
Chyba je mezi klávesnicí a židlí.
Avatar
Raiper34
Tvůrce
Avatar
Odpovedá na David Novák
Raiper34:21.2.2015 21:53

Som ;) a ty si tusim prvak :P

Odpovedať
21.2.2015 21:53
Posledná vydaná hra: http://www.islandsoft.cz/index.php?art=hra-akcna-space-resistance
Avatar
David Novák
Tvůrce
Avatar
Odpovedá na Raiper34
David Novák:21.2.2015 21:56

Jop :D
Mám kámoše ve druháku.. Tak mi vykládal jak jste si "užili" IFJ.. :P

Odpovedať
21.2.2015 21:56
Chyba je mezi klávesnicí a židlí.
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zatiaľ nikto nevložil komentár - buď prvý!