Portál AbcLinuxu, 13. srpna 2025 00:05


Dotaz: Vyrovnavacia pamat v linuxe

28.9.2010 21:35 Igor Bielik
Vyrovnavacia pamat v linuxe
Přečteno: 513×
Odpovědět | Admin
Ahojte mam maly problem da sa nastavit vyrovnavacia pamat v linuxe tak aby sa nepouzivala? Skusal som funkcie setbuf, setbuffer ale nedari sa mi ju vypnut viac priklad.

#include  

int  main(void)
{
  int  cislo[2];
  char retazec[2][10];

  fprintf(stdout, "Zadaj cislo 1: ");
  scanf("%d", &cislo[0]); 
  setbuf(stdin, NULL);

  fprintf(stdout, "Zadaj cislo 2: ");
  scanf("%d", &cislo[1]);
  setbuffer(stdin, NULL, 0);

  fprintf(stdout, "Zadaj retazec 1: ");
  fscanf(stdin, "%9s", retazec[0]);

  fprintf(stdout, "Zadaj retazec 2: ");
  fscanf(stdin, "%9s", retazec[1]);

  printf("%s %s %d %d\n", retazec[0], retazec[1],
                          cislo[0], cislo[1]);
	return 0;
}
  Chcel by som aby sa nacital iba prvy parameter a nie cely buffer. Napr: Zadaj cislo 2: 22 retazec1 retazec2
a automaticky sa to nacita z bufferu ako tomu zabranit?



Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

29.9.2010 10:24 luky
Rozbalit Rozbalit vše Re: Vyrovnavacia pamat v linuxe
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nepochopil som co si mal presne na mysli. Ale vo vseobecnosti buffer sluzi na urychlenie prace s IO prudmi. Ak na vstup nedostanes to co ocakavas, problem bude skor vo formatovacom retazci pri volani funkcie scanf().

29.9.2010 19:11 Sten
Rozbalit Rozbalit vše Re: Vyrovnavacia pamat v linuxe
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nijak. Můžeš před vypsáním zadání přečíst (a zahodit) celý vstup (to dělá třeba su), ale proč to vůbec chceš dělat?
29.9.2010 19:14 Sten
Rozbalit Rozbalit vše Re: Vyrovnavacia pamat v linuxe
setbuf a setbuffer slouží pro výstupní proudy a jenom pro tu aplikaci (pro bufferování dat, která se poté předají jádru), nijak neovlivňují buffery v jádře (které mj. provádějí bufferování stdin). Více viz manuál
29.9.2010 20:54 Petr Šobáň | skóre: 80 | blog: soban | Olomouc
Rozbalit Rozbalit vše Re: Vyrovnavacia pamat v linuxe
Vím že to jde, nevím zda i v linuxu.

Prostě musí se ten proud stdout skopírovat a pak používat tu kopii kde už se dá buffer nastavit.

Nebo nějak tak jsem to viděl v příkladu kdysi, jak přijedu domů skusím projít knížky.
29.9.2010 21:02 Sten
Rozbalit Rozbalit vše Re: Vyrovnavacia pamat v linuxe
Tohle jde u ISO C++ iostreamů (i bez kopírování), ale ne u ISO C
29.9.2010 21:08 pht | skóre: 48 | blog: pht
Rozbalit Rozbalit vše Re: Vyrovnavacia pamat v linuxe
Myslím že ho trápí to že když napíše "123 hola" a [enter] tak sekvence scanf("%d"), scanf("%s") mu naparsuje 123 a "hola" a on místo toho chce aby se to na "hola" vysralo a vynutilo si to "123" [enter] "hola" [enter].
In Ada the typical infinite loop would normally be terminated by detonation.
30.9.2010 11:29 Sten
Rozbalit Rozbalit vše Re: Vyrovnavacia pamat v linuxe
Ano, to chápu. su dělá to, že přečte a zahodí veškerý vstup předtím, než začne načítat heslo. Do konce řádku lze zahazovat vstup třeba pomocí while ((c = getchar()) != '\n' && c != EOF) ;
29.9.2010 20:58 Igor Bielik
Rozbalit Rozbalit vše Re: Vyrovnavacia pamat v linuxe
Odpovědět | | Sbalit | Link | Blokovat | Admin
Proste slo mi oto aby uzivatel zadal iba jeden paramater resp. jednu hodnotu na vstupe.
vlastikroot avatar 30.9.2010 06:26 vlastikroot | skóre: 24 | blog: vlastikovo | Milevsko
Rozbalit Rozbalit vše Re: Vyrovnavacia pamat v linuxe
Odpovědět | | Sbalit | Link | Blokovat | Admin
fflush(stdin);
We will destroys the Christian's legion ... and the cross, will be inverted
30.9.2010 10:38 Petr Šobáň | skóre: 80 | blog: soban | Olomouc
Rozbalit Rozbalit vše Re: Vyrovnavacia pamat v linuxe
A skusil jsi to? To taky nefunguje.
30.9.2010 14:14 Igor Bielik
Rozbalit Rozbalit vše Re: Vyrovnavacia pamat v linuxe
Odpovědět | | Sbalit | Link | Blokovat | Admin
Tak som si nasiel zdrojak su a pozrel ako to je riesene tam. Cez funkciu getline tak som ju tiez pouzil a funguje to podla mojich predstav. Dakujem vsetkym za pomoc.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.