Geek tričko zdarma Geek tričko zdarma
Tričko zdarma! Stačí před dobitím bodů použít kód TRIKO15. Více informací zde

Diskuze: formátovaný výstup z funkce

Aktivity (2)
Avatar
David Ježek
Člen
Avatar
David Ježek:25.5.2018 11:42

Ahoj, potřeboval bych poradit mám funkci která je návratového typu void a končí takovýmhle výpisem:
printf("%02d:%02­d:%02d,%03d --> %02d:%02d:%02­d,%03d\n", h, m, s, ms, hDo, mDo, sDo, msDo);

Já bych potřeboval aby funkce vracela char v takovomhle formátu abych ho následně mohl zapsat do souboru (jedná se o přečasování titulků pro školní účely), problém je v tom že formátování spolu s int proměnýma se nechce převést. Je možný že je to hloupý dotaz ale já už jsem vážně vyzkoušel vše co mě napadlo. Budu rád za radu.

 
Odpovědět 25.5.2018 11:42
Avatar
DarkCoder
Člen
Avatar
Odpovídá na David Ježek
DarkCoder:25.5.2018 12:46

Způsob který chceš je zbytečně složitý a pomalý, neboť to vyžaduje mnoho zbytečných kroků. Funkce by navíc neměla vracet char ale ukazatel na char. Ty ale potřebuješ vracet řetězec nikoli znak. Mimochodem možnost zapisovat do souboru nemá žádný vztah s návratovým typem funkce a není důvod jej měnit.

Zápis do souboru lze udělat přímo. Lepší způsob je následující:

K seznamu parametrů přidej formální parametr ukazatel na typ (FILE *). Pro formátovaný zápis použij funkci fprintf(). Ta se chová úplně stejně jako její konzolová funkce printf() s tím rozdílem, že první parametr je právě ukazatel na typ FILE. Můžeš tak provést zápis na obrazovku pomocí printf() a zároveň zápis do souboru pomocí fprintf().

void vypis(FILE *fp){
  //...
  printf(...);
  fprintf(fp, ...);
  return;
}
Nahoru Odpovědět  +1 25.5.2018 12:46
"„Učíš-li se proto, aby sis zapamatoval, zapomeneš. Učíš-li se proto, abys porozuměl, zapamatuješ si."
Avatar
David Ježek
Člen
Avatar
David Ježek:25.5.2018 13:05

Díky mě to právě přišlo strašně složitý a zbytečný, ale tohle mě nenapadlo. No spíš jsem zapoměl na fprintf. Díky moc.

 
Nahoru Odpovědět 25.5.2018 13:05
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 3 zpráv z 3.