Forum » Programiranje » [C] branje iz tipkovnice
[C] branje iz tipkovnice
rokpok ::
Znašel sem se pred sledečo težavo:
(primer)
Sedaj, če pri prvem vnosu (ReadLine (pattern, 10)) napišem besedilo, ki je daljše od 10 znakov se dogodi naslednje: v pattern se zapiše 10 znakov, v string pa se zapišejo preostali znaki.
(primer)
vnos: ta
vnos2: program
izpis: ta
izpis2: program
vnos: to ni nekaj dobrega
izpis: to ni neka
izpis2: dobrega
Isto se zgodi tudi ob uporabi standardne funkcije (fgets()).
(primer)
#include <stdio.h> void ReadLine (char *string, int size); int main() { char *pattern; char *string; pattern= (char *) malloc (10); string= (char *) malloc (100); ReadLine (pattern, 10); ReadLine (string, 100); printf ("%s\n%s\n", pattern, string); free (pattern); free (string); } void ReadLine (char *string, int size) { int i; char ch; for (i=0; ((ch=getchar())!='\n') && i<size; i++, *string++) *string=ch; *string='\0'; }
Sedaj, če pri prvem vnosu (ReadLine (pattern, 10)) napišem besedilo, ki je daljše od 10 znakov se dogodi naslednje: v pattern se zapiše 10 znakov, v string pa se zapišejo preostali znaki.
(primer)
vnos: ta
vnos2: program
izpis: ta
izpis2: program
vnos: to ni nekaj dobrega
izpis: to ni neka
izpis2: dobrega
Isto se zgodi tudi ob uporabi standardne funkcije (fgets()).
Rad bi bil pingvin.
rokpok ::
Poenostavljeno: prebrati dva stringa iz tipkovnice. Saj je vse lepo in prav, a če vpišeš več znakov, kot je določenih za pattern (v tem primeru 10), se tisti odvečni znaki zapišejo v string. Ne vem, kako bi lepše to razložil. Najbolje bo, če testirate kodo, ki sem jo navedel, pa boste videli.
Lp
Lp
Rad bi bil pingvin.
Zgodovina sprememb…
- spremenil: rokpok ()
OwcA ::
Če drugega ne, si lahko vzameš dovolj prostora in potem previriš, če je shranjen niz res krajši od 10 znakov.
Otroška radovednost - gonilo napredka.
rokpok ::
Ja, to vem da bi bila izvedljiva rešitev. Drugega načina ni? Zakaj pa sploh pride do tega? A se še nihče ni srečal s podobno težavo?
Rad bi bil pingvin.
OwcA ::
V ReadLine lahko poskrbiš, da se ob vsakem klicu oddričaš do konca vrstice.
Otroška radovednost - gonilo napredka.
rokpok ::
Oprosti OwcA ampak tega zadnjega posta pa ne razumem. Kaj naj bi pomenilo "oddričaš"?
Rad bi bil pingvin.
Gundolf ::
V ReadLine, v zanki imas pogoj
Kar hocem povedati je to, da imas zaenkrat v for deklaraciji 2 pogoja za koncanje, na katera hoces odreagirati razlicno. Zato ju loci in za vsakega posebej definiraj zakljucek.
Pa se nekaj, tole:
((ch=getchar())!='\n') && i<sizeTo spremeni tako da bo v for deklaraciji le zanki le
(ch=getchar())!='\n')drugi del pa prestavi znotraj zanke tako, da zapisujes v string le dokler je v njem se prostor.
Kar hocem povedati je to, da imas zaenkrat v for deklaraciji 2 pogoja za koncanje, na katera hoces odreagirati razlicno. Zato ju loci in za vsakega posebej definiraj zakljucek.
Pa se nekaj, tole:
*string='\0;'ti sedaj zapisujes (v primeru predolgih vnosov) na size+1 mesto v stringu. Torej ti le sreca pomaga, da program ne umre v access violation errorju.
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Nadaljuj Javanski programOddelek: Programiranje | 1727 (1128) | nightrage |
» | [JAVA] kako dobiti določene chareOddelek: Programiranje | 1609 (1456) | molotov |
» | [VB 2005] branje tekstaOddelek: Programiranje | 1646 (1314) | mNeRo |
» | dvojna while zanka- problemOddelek: Programiranje | 1132 (1012) | T(he) Boss |
» | Nalaganje nastavitev iz tekstovne datoteke [vodič]Oddelek: Programiranje | 1015 (858) | Vesoljc |