Anonymní profil Pavel – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil Pavel – Programujte.comAnonymní profil Pavel – Programujte.com

 

Příspěvky odeslané z IP adresy 78.102.152.–

Pavel
C / C++ › Jak testovat zaplnění obrazo…
19. 5. 2017   #216131

#2 gna Moc děkuju. V podstatě to, co dělám, je nelogický. Prohlížím texťák a hledám v něm form feed, kterej tam pravděpodobně ani není (vlastně určitě tam není, když ho tam program nenajde...). Místo toho jsem se měl starat o detekci rozměrů konzole. Jinak jasně, máš pravdu: místo číslování stran by tam měla být spíš nějaká zarážka, třeba getchar(), která ten výpis pozastaví a počká na nějakej vstup od uživatele, než bude pokračovat. Jdu se podívat na tyhle funkce (getenv COLUMNS a LINES, ioctl TIOCGWINSZ a SIGWINCH), o kterých se zmiňuješ. Nemám ani tušení, že vůbec existují, natož jak se používají, jaké mají parametry, atd. Tohle mě zajímá. Napsat to tak, aby se to pravidelně zastavovalo třeba po třiceti odřádkováních - \n  (když budu předpokládat, že okno má v defaultním rozměru třeba 30 řádek) - by sice šlo, ale je to dost nuda:-) Navíc zase: řádek v tom texťáku nemusí (a nebude) odpovídat řádku v konzoli. 

Ještě jednou moc děkuju, jdu se učit :-)

Pavel
C / C++ › Jak testovat zaplnění obrazo…
19. 5. 2017   #216106

Dobrý den,

snažím se učit jazyk C z Heroutovy Učebnice jazyka C. Používám OS Linux (Ubuntu). Jedno z cvičení v knize je napsat funkci void vypis(FILE *fr), která vypíše na obrazovku obsah textového souboru. To by nebyl problém. V další úloze je zdokonalit funkci vypis() tak, aby zajišťovala stránkování po zaplnění obrazovky. A tady jsem narazil. Chtěl bych se zeptat, jak můžu otestovat, že se při výpisu dorazilo na konec obrazovky (konzole, okna terminálu). Napsal jsem to takhle:

void vypis(FILE *fr)
{
  int znak = 0,
      strana = 0;
  while ( (znak = getc(fr)) !=  EOF) {
    if (znak == '\f') {
      strana = strana + 1;
      printf("\nStrana %d\n", strana);
    }
    else
      putchar(znak);
  }
  printf("\nPocet stran %d\n", strana);

}

protože jsem se domníval, že escape sekvence \f (form feed) je neviditelný "znak", který odděluje stránky. Ale takhle to asi není. V proměnné strana je pořád nula. Takže ta podmínka by měla vypadat jinak. Jen nevím jak... Poradili byste, prosím ?

(Ještě dodám, že soubor se otevírá a zavírá pro čtení v hlavní funkci (main), kde se taky volá funkce vypis(). Soubor se normálně vypisuje, v tom není problém.)

Moc děkuju za pomoc !

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032021 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý