Kde mám chybu - switch

Wiring, C++, C, Java, ...
Pravidla fóra
Toto subfórum slouží k řešení obecných otázek kolem programování (konstrukce, knihovny, alokace paměti, ...)
gilhad
Příspěvky: 418
Registrován: 07 bře 2018, 11:22
Reputation: 5

Re: Kde mám chybu - switch

Příspěvek od gilhad » 12 led 2020, 10:07

No nevim, ja bych na to sel tak, ze pokud nacitam cisla od 0 do 99, tak bych nacetl maximalne dva znaky v rozsahu 0-9 a jeden navic. Pokud by ten navic nebyl konec radku, nebo by prvni nebyl cislice, tak uzivateli vynadam, doctu a zahodim zbytek radku a zkusim to znova. Takze mam dve cislice, ty snadno prevedu na cislo v rozsahu byte a overim, zda mi dava smysl - kdyz se nevejde do zadanych mezi, uzivateli vynadam a ctu znova.

Pokud by byl rozsah vetsi, tak pouziju unsigned int a ctu az 4 cifry, pokud by byl jeste vetsi, pouziju unsigned long a ctu tech cifer vic.

(Vynadam uzivateli = zobrazim napovedu typu "Zadejte cislo od 1 do 20 a stisknete Enter - vas vstup selhal, protoze znak "," na pozici 3 nelze pouzit" nebo tak neco)

AstroMiK
Příspěvky: 252
Registrován: 08 pro 2017, 19:05
Reputation: 1

Re: Kde mám chybu - switch

Příspěvek od AstroMiK » 12 led 2020, 10:29

gilhad píše:
12 led 2020, 10:07
V podstatě to tak mám v tom předchozím příkladu. Akorát mám připravený prostor na 9 zadaných znaků.
Navíc tam ještě testuji znak '+' na první pozici a případ, kdy není zadaný žádný znak.

Taky je třeba pamatovat na to, že zadaný řetězec nemusí končit Enterem. Záleží na nastavení sériového terminálu.

Ale jinak to asi řešíme stejně:

1) Načíst znaky ze sériové linky do pole znaků.
2) Když je v sériové lince ještě něco navíc, tak to smazat (vyprázdnit buffer)
3) Brát z pole znak po znaku a když nevyhovuje podmínce (znak >= '0' and znak <= '9') zapamatovat si, že mám vynadat uživateli
(s jedinou výjimkou, kdy je na začátku znak '+' to může být v pořádku).

4) Když projdu celé pole, kouknu, jestli mám zapamatováno, že mám vynadat uživateli a když ne, převedu pole znaků do unsigned long - funkce atoi().

kiRRow
Příspěvky: 239
Registrován: 07 kvě 2019, 07:03
Reputation: 2
Bydliště: Opava

Re: Kde mám chybu - switch

Příspěvek od kiRRow » 12 led 2020, 10:34

Už při načítání jednotlivých znaků bych kontroloval co z toho leze ... pokud je to v rozsahu ASCII "48" až "57" ... jedná se o číslo. Jinak nadávám. Popř toleruji, nebo přímo vyžaduji a kontroluji znaky "10" a "13"

gilhad
Příspěvky: 418
Registrován: 07 bře 2018, 11:22
Reputation: 5

Re: Kde mám chybu - switch

Příspěvek od gilhad » 12 led 2020, 10:42

kiRRow píše:
12 led 2020, 10:34
Už při načítání jednotlivých znaků bych kontroloval co z toho leze ... pokud je to v rozsahu ASCII "48" až "57" ... jedná se o číslo. Jinak nadávám. Popř toleruji, nebo přímo vyžaduji a kontroluji znaky "10" a "13"
Taky to tak beru - vynadat uzivateli co nejdriv :) (+ na zacatku je zbytecne, ale slo by to overit, +uvnitr je chyba).

Navic s timto pristupem muzu testovat i na jine terminatory, pokud za tim ma neco nasledovat, tak to zbytecne nesezeru (napriklad zadani souradnic 10,12 nebo vzorce 1+2-3*4 - porad se zastavim na konci prvniho cisla a nesezeru zbytek retezce, ktery bych pracne lovil)

kiRRow
Příspěvky: 239
Registrován: 07 kvě 2019, 07:03
Reputation: 2
Bydliště: Opava

Re: Kde mám chybu - switch

Příspěvek od kiRRow » 12 led 2020, 10:52

No jako v praxi, pokud se něco ovládá po seriové lince, tak jsem ještě nikdy neviděl, že by uživatel přímo měl terminál a bylo mu dovoleno solit do toho cokoliv co ho napadne. Uživatel má přece uživatelské rozhraní, které samotné uživatele omezuje a hlídá. Navíc komunikaci tvaruje do nějakého protokolu tak, aby pro přijímací stanici bylo co nejjednodužší tomu porozumět. Uživatel má pak před sebou např výběrovou roletku, kde nemůže navolit nic jiného než mu dovolíme, tlačítka a přepínače.

tosik
Příspěvky: 6
Registrován: 11 led 2020, 14:48
Reputation: 0

Re: Kde mám chybu - switch

Příspěvek od tosik » 12 led 2020, 11:03

Díky za odpovědi a návrhy. Ono opravdu tady v tomto případě je asi zbytečné to ověřovat, sériová linka k dispozici nebude, ale učím se, a tak jsem si to chtěl trošku okořenit. Potřebuji praktický příklad, abych to pochopil. Ono se mi to časem v nějakém projektu bude hodit, až budu potřebovat něco odfiltrovat, zkontrolovat. Ještě jednou díky.

gilhad
Příspěvky: 418
Registrován: 07 bře 2018, 11:22
Reputation: 5

Re: Kde mám chybu - switch

Příspěvek od gilhad » 12 led 2020, 12:18

No nevim, ja seriovou linku pouzivam docela casto, ono je to vyrazne jednodussi a univerzalnejsi - kdyz to vyladim, tak ji pak muzou pouzivat i arduina proti sobe (a pak ty hlasky spis vypadaji nejak takto: "#ERROR 2: Syntax, line 256, char 3 = ',' is not number") a naopak prijeti vypada "#OK: value 12" pricemz se hleda "#xxx:" a podle toho se to zaridi, zbytek se bud zobrazi, nebo zahodi

tosik
Příspěvky: 6
Registrován: 11 led 2020, 14:48
Reputation: 0

Re: Kde mám chybu - switch

Příspěvek od tosik » 12 led 2020, 17:12

Asi ano, já ji zatím používám, abych nemusel furt nahrávat program do Arduina, když chci zjistit, co se stane, když změním nějakou hodnotu a taky pro výpis stavu proměnných apod. Tak snad se jednou dostanu do fáze, kdy budu řešit i věci, jak píšeš... :-D Díky moc za pomoc.

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 1 host