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 | 1876 (1277) | nightrage |
| » | [JAVA] kako dobiti določene chareOddelek: Programiranje | 1725 (1572) | molotov |
| » | [VB 2005] branje tekstaOddelek: Programiranje | 1757 (1425) | mNeRo |
| » | dvojna while zanka- problemOddelek: Programiranje | 1228 (1108) | T(he) Boss |
| » | Nalaganje nastavitev iz tekstovne datoteke [vodič]Oddelek: Programiranje | 1159 (1002) | Vesoljc |