NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze – Lekce 13 - Funkce s variabilním počet a typem argumentů v jazyce C

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
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í.

 
Odpovědět
19.2.2015 18:08
Avatar
Odpovídá 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ú.

Odpovědět
19.2.2015 18:17
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
tomisoka
Tvůrce
Avatar
Odpovídá 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)

 
Odpovědět
19.2.2015 18:37
Avatar
Odpovídá 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':

Editováno 19.2.2015 18:45
Odpovědět
19.2.2015 18:44
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
tomisoka
Tvůrce
Avatar
Odpovídá na Libor Šimo (libcosenior)
tomisoka:19.2.2015 18:49

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

 
Odpovědět
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ť.

Odpovědět
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

Odpovědět
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
Odpovídá na Raiper34
David Novák:21.2.2015 20:41

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

Odpovědět
21.2.2015 20:41
Chyba je mezi klávesnicí a židlí.
Avatar
Raiper34
Tvůrce
Avatar
Odpovídá na David Novák
Raiper34:21.2.2015 21:53

Som ;) a ty si tusim prvak :P

Odpovědět
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
Odpovídá 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

Odpovědět
21.2.2015 21:56
Chyba je mezi klávesnicí a židlí.
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 10 zpráv z 12.