» »

[C] branje iz tipkovnice

[C] branje iz tipkovnice

rokpok ::

Znašel sem se pred sledečo težavo:

(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.

OwcA ::

Kaj natanko skušaš naresti?
Otroška radovednost - gonilo napredka.

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
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.

OwcA ::

Poješ/odrežeš vse znake do konca vrstice.
Otroška radovednost - gonilo napredka.

Gundolf ::

V ReadLine, v zanki imas pogoj
((ch=getchar())!='\n') && i<size
To 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 ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Nadaljuj Javanski program

Oddelek: Programiranje
111727 (1128) nightrage
»

[JAVA] kako dobiti določene chare

Oddelek: Programiranje
131609 (1456) molotov
»

[VB 2005] branje teksta

Oddelek: Programiranje
241646 (1314) mNeRo
»

dvojna while zanka- problem

Oddelek: Programiranje
121132 (1012) T(he) Boss
»

Nalaganje nastavitev iz tekstovne datoteke [vodič]

Oddelek: Programiranje
81015 (858) Vesoljc

Več podobnih tem