C - ako zistit ze bolo zadane cislo

Programovacie jazyky, rady, poradňa...
Mek
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4661
Registrovaný: 23 mar 2005, 23:00
Bydlisko: ZA <-> TN
Kontaktovať používateľa:

C - ako zistit ze bolo zadane cislo

Príspevok od používateľa Mek »

Potrebujem do semestralky zistit, ci uzivatel zadal cislo, alebo nejake ine znaky, tj. aby ho pri nespravnom vstupe nepustilo dalej.
Nasiel som na nete fciu is_int (ekvivalent PHP fcie is_int), ktora sice funguje, ale pre vstup zacinajuci cislom vrati, ze tato hodna bola cislo. Ako vstupny parameter berie retazec.
Skusal som teda nacitat cislo ako retazec a v pripade ze is_int vrati 1, tak tuto hodnotu priradit mojej premennej, ktora je typu int. Avsak je tam problem s datovymi typmi, vraj Nonportable pointer conversion (to ked som spravil prem=(int *)nacitany_retazec;)
V Pascale bola na to direktiva kompilatora $I a premenna IOResult.
Ako teda v C tento problem spolahlivo vyriesit?
(ka+ za funkcne riesenie ista)
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Na zmenu reťazca na číslo môžeš použiť funkciu atoi, alebo strtol.
Mek
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4661
Registrovaný: 23 mar 2005, 23:00
Bydlisko: ZA <-> TN
Kontaktovať používateľa:

Príspevok od používateľa Mek »

Ked som pouzil strtol, tak mi to vyhlasovalo 4 warningy, vraj Suspicious pointer conversion (a tiez to fungovalo tak, ze ak som zadal ako prvy znak cislo a potom pismena, tak to zobralo cely retazec ako cislo).
Skusim este to atoi, a potom dam vediet.
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Tá funkcia slúži na prevod reťazca na číslo. Pokúsi sa skonvertovať tak veľkú časť reťazca, ako sa dá. Môžeš tam použiť parameter end a podľa toho si potom môžeš overiť, či sa ten reťazec použil celý, alebo nie.
Ako si použil tú funkciu, keď ti to píše tú chybu?
tomo.za
Light Star
Light Star
Používateľov profilový obrázok
Príspevky: 261
Registrovaný: 26 sep 2005, 13:35
Bydlisko: Brno/Zilina
Kontaktovať používateľa:

Príspevok od používateľa tomo.za »

string si skopiruj do pola a to si potom vo while prechadzaj a kontroluj si to cez isnum() ak chces kontrolovat len prvy znak ani to nemusis davat do toho pola...
Mek
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4661
Registrovaný: 23 mar 2005, 23:00
Bydlisko: ZA <-> TN
Kontaktovať používateľa:

Príspevok od používateľa Mek »

Pomohla mi ta fcia atoi, som ani nevedel podla coho ju hladat :) Sice to aj tak zozerie vstup zacinajuci cislom, napr. 4vbcv, ale aj to je aspon nieco. Dakujem chronovi a posielam Kaplus.
Napísať odpoveď