Yksinkertanen ongelma, mutta kun en ole mistään löytänyt vastausta. Oon kattonu läpi kymmeniä sivuja jotka liippaa aihetta mutta mistään ei löytyny todellista ratkaisua ongelmaan.
Eli kun pyydän käyttäjää syöttämään kokonaisluvun, niin ohjelma sekoaa, jos syöttää muuta kuin numeroita. Oon yrittäny aika montaa erilaista tapaa, jopa sillain että tallentaa syötteen stringiin ja tarkastaa jokaisen merkin erikseen isdigit() funktiolla, mutta ei. Aina sama lopputulos, eli kun syöttää merkkejä, niin ohjelma joutuu päättymättömään silmukkaan (mikä johtuu siitä, että numeronkysyntäfunktiota toistetaan while-silmukassa kunnes saadaan rajoihin sopiva arvo)
Eli: Millä funktiolla kannattaa kysyä käyttäjältä, ja minkälaisen käsittelyn kautta päätyä lopulliseen, validiin int-muuttujaan?
Jos olette joskus ongelmaan törmänneet ja sen ratkaisseet, niin ei tartte kysellä mitä kirjastofunktioita minä oon yrittäny, kertokaa vaan ratkaisu :)
no tuo stringin tarkistus isdigitillä on kai ihan pätevä tapa, korjaat vain silmukkaasi niin ettei tule ikuista silmukkaa. jos et löydä vikaa niin laitas koodiasi tänne niin katsotaan mikä on vikana.
Lue ensin muuttuja char-taulukkoon. Sitten ongit luvun siitä sscanf-functiolla. Esim.
char muuttuja[255]; scanf("%s",&muuttuja); int luku; sscanf(muuttuja,"%i",%luku); printf("%i",luku);
Toinen vaihtoehto on tarkistaa onko merkkijonossa muita kuin numeroita, jos on niin kysytään uusi luku. Esim:
char muuttuja[255]; scanf("%s",&muuttuja); int pituus = strlen(muuttuja); for(int i = 0; i < pituus; i++) if((int)muuttuja[i] < 48 || (int)muuttuja[i] > 57) printf("Virheellinen luku\n");
Muistaakseni sain yhdesti toimivan ratkaisun tutkimalla funktion scanf palautusarvoa. Tosin muistini on hatara.
HÄH?
etkös saa sen tälläin:
int i; printf("anna luku\n"); if (scanf("%d",&i)) printf("annoit: %d\n",i); else printf("ei ollut luku\n");
muutat tietysti kontekstiin sopivaksi
No juuri se palautusarvo :)
Aihe on jo aika vanha, joten et voi enää vastata siihen.