Mister
Guest
Wed Dec 29, 2004 9:30 pm
Witam,
ostatnio bawiłem się powyższą f-cją na ATMEGA128. I odkryłem dziwną
przypadłość, mianowicie: gdy próbowałem odczytać liczbę dziesiętną (lub
hex - nie ma znaczenia) tj. jak wprowadzałem znaki z zakresu tj. 0-9 lub
0-F,to wszystko było ok; ale jeżeli wprowadziłem znak z poza powyższego
zakresu to procesor wychodził z funkcji i odtąd już ją "ignorował" tzn.
zachowywał się tak, jak by jej nie było. Dopiero pomagał reset, i znowu
wszystko było ok do momentu wprowadzenia znaku z poza zakresu. IMHO powinno
tak być , że jeżeli przyjdzie "taki" znak to scanf zwraca EOF (-1) i tyle.
while(9){
ui_temp1 = scanf( "%x",&ui_temp) ;
printf("key_char=%x",ui_temp);
}
Dodam, że ze stringami jest wszystko Ok.
No nie mam już koncepcji co jest nie tak. Może ktoś to już przerabiał.
Pozdrawiam
Mister
J.F.
Guest
Wed Dec 29, 2004 10:55 pm
On Wed, 29 Dec 2004 22:30:19 +0100, Mister wrote:
Quote:
ostatnio bawiłem się powyższą f-cją na ATMEGA128. I odkryłem dziwną
przypadłość, mianowicie: gdy próbowałem odczytać liczbę dziesiętną (lub
hex - nie ma znaczenia) tj. jak wprowadzałem znaki z zakresu tj. 0-9 lub
0-F,to wszystko było ok; ale jeżeli wprowadziłem znak z poza powyższego
zakresu to procesor wychodził z funkcji i odtąd już ją "ignorował" tzn.
zachowywał się tak, jak by jej nie było. Dopiero pomagał reset, i znowu
wszystko było ok do momentu wprowadzenia znaku z poza zakresu. IMHO powinno
tak być , że jeżeli przyjdzie "taki" znak to scanf zwraca EOF (-1) i tyle.
while(9){
ui_temp1 = scanf( "%x",&ui_temp) ;
printf("key_char=%x",ui_temp);
}
Dodam, że ze stringami jest wszystko Ok.
No nie mam już koncepcji co jest nie tak. Może ktoś to już przerabiał.
To jest feature a nie wada :-)
scanf czyta znaki do momentu poki mu sie podobaja, ale jak trafi na
zly, to konczy operacje, a znak zwraca do bufora, zeby nastepny scanf
mogl odczytac bez gubienia znakow.
Musisz odczytac jeden znak i go wyrzucic.
Tako rzecze standard.
J.
Mister
Guest
Thu Dec 30, 2004 8:43 pm
Quote:
To jest feature a nie wada :-)
scanf czyta znaki do momentu poki mu sie podobaja, ale jak trafi na
zly, to konczy operacje, a znak zwraca do bufora, zeby nastepny scanf
mogl odczytac bez gubienia znakow.
Musisz odczytac jeden znak i go wyrzucic.
Wielkie dzięki,
nawet spodziewałem się takiego zachowania licząc cały czas, że scanf zwróci
EOF (-1) a nie zero :-(
Mister
Krzysztof Rudnik
Guest
Thu Dec 30, 2004 8:48 pm
Mister wrote:
Quote:
To jest feature a nie wada :-)
scanf czyta znaki do momentu poki mu sie podobaja, ale jak trafi na
zly, to konczy operacje, a znak zwraca do bufora, zeby nastepny scanf
mogl odczytac bez gubienia znakow.
Musisz odczytac jeden znak i go wyrzucic.
Wielkie dzięki,
nawet spodziewałem się takiego zachowania licząc cały czas, że scanf
zwróci
EOF (-1) a nie zero
scanf zwraca EOF na koncu pliku - (o ile konsola moze miec EOF).
Normalnie zwraca _liczbe_ poprawnie wczytanych pol (tych z %).
0 oznacza ze nic nie wczytalo, ale plik sie nie skonczyl.
Krzysiek Rudnik
Mister
Guest
Thu Dec 30, 2004 9:08 pm
Quote:
scanf zwraca EOF na koncu pliku - (o ile konsola moze miec EOF).
Normalnie zwraca _liczbe_ poprawnie wczytanych pol (tych z %).
0 oznacza ze nic nie wczytalo, ale plik sie nie skonczyl.
a tak przy okazji zapytam: czy istnieje np. w AVRGCC trochę bardziej
rozbudowana funkcja aniżeli scanf, chodzi o możliwość wprowadzania stringa,
ale z możliwością użycia klawiszy: Esc,Insert, Delete, kursorów itp. i
akceptacja wprowadzanego tekstu za pomocą Enter?
Pozdrawiam
Mister
J.F.
Guest
Fri Dec 31, 2004 12:26 am
On Thu, 30 Dec 2004 22:08:57 +0100, Mister wrote:
Quote:
scanf zwraca EOF na koncu pliku - (o ile konsola moze miec EOF).
Normalnie zwraca _liczbe_ poprawnie wczytanych pol (tych z %).
0 oznacza ze nic nie wczytalo, ale plik sie nie skonczyl.
a tak przy okazji zapytam: czy istnieje np. w AVRGCC trochę bardziej
rozbudowana funkcja aniżeli scanf, chodzi o możliwość wprowadzania stringa,
ale z możliwością użycia klawiszy: Esc,Insert, Delete, kursorów itp. i
akceptacja wprowadzanego tekstu za pomocą Enter?
To nie bascom :-)
Pod unixa to sie i znajdzie, ale pod nieokreslony wyswietlacz,
klawiature - to nie ma ..
J.
Krzysztof Rudnik
Guest
Fri Dec 31, 2004 8:40 am
Mister wrote:
Quote:
scanf zwraca EOF na koncu pliku - (o ile konsola moze miec EOF).
Normalnie zwraca _liczbe_ poprawnie wczytanych pol (tych z %).
0 oznacza ze nic nie wczytalo, ale plik sie nie skonczyl.
a tak przy okazji zapytam: czy istnieje np. w AVRGCC trochę bardziej
rozbudowana funkcja aniżeli scanf, chodzi o możliwość wprowadzania
stringa, ale z możliwością użycia klawiszy: Esc,Insert, Delete, kursorów
itp. i akceptacja wprowadzanego tekstu za pomocą Enter?
Mozliwosci edycji nie sa zadaniem funkcji C tylko handlera
konsoli - w typowych systemach najpierw system
dogaduje sie z uzytkownikiem (wtedy mozna edytowac),
jak user nacisnie Enter system przekazuje linie tekstu
do programu i dopiero wtedy program moze to przeczytac.
Krzysiek Rudnik