Mikuláš je tu! Získaj 90 % extra kreditov ZADARMO s promo kódom CERTIK90 pri nákupe od 1 199 kreditov. Len do nedele 7. 12. 2025! Zisti viac:
NOVINKA: Najžiadanejšie rekvalifikačné kurzy teraz s 50% zľavou + kurz AI ZADARMO. Nečakaj, táto ponuka dlho nevydrží! Zisti viac:

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
Posledné komentáre sú na spodnej časti poslednej stránky.
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í.

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ť
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)

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é
Odpovedať
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.

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ť
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ť
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ť
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ť
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ť
Chyba je mezi klávesnicí a židlí.
Posledné komentáre sú na spodnej časti poslednej stránky.
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.

Zobrazené 10 správy z 18.