scanf()-funktio
scanf-funktiolla voidaan syöttää tietoa ohjelman muuttujille : Wiki Markup
Code Block |
---|
scanf(" |
...
Wiki Markup |
---|
tyypin muotoilu
• %c char=merkki
• %s char\[\]=merkkijono
• %d int=kokonaisluku
• %i int =kokonaisluku
• %f float=reaaliluku
• %l long=pitkä kokonaisluku
• %lf double=kaksoistarkkuuden reaaliluku
• %u unsigned=etumerkitön |
Huom! scanf ottaa aina parametrikseen muuttujan osoitteen ja siksi scanf funktion kanssa kannattaa olla hyvin varovainen, jos ohjelman käyttäjä antaa esimerkiksi lukua kysyttäessä kirjaimen, todennäköisesti ohjelma "kaatuu".
...
muotoilumerkkijono", muuttujan1_osoite, muuttujan2_osoite, ...);
|
, jossa muotoilumerkkijono muodostuu seuraavista (yhdestä tai useammasta):
muotoilu | tyyppi | selitys | ||
---|---|---|---|---|
%c | char/int | yksi merkki | ||
<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="601b0c8f-10df-41c2-bd56-fa2dca29e400"><ac:plain-text-body><![CDATA[ | %s | char[] | merkkijono (päättyy NULL-merkkiin) | ]]></ac:plain-text-body></ac:structured-macro> |
%d | int/char | kokonaisluku | ||
%i | int/char | kokonaisluku | ||
%u | unsigned int/unsigned char | etumerkitön kokonaisluku | ||
%l | long | pitkä kokonaisluku | ||
%f | float | reaaliluku | ||
%lf | double | kaksoistarkkuuden reaaliluku |
, ja muuttujanX_osoite annetaan muodossa:
Code Block |
---|
scanf(... , &Muuttuja); // &-merkin avulla saadaan muuttujan osoite luettua.
|
Lukemisen päättyminen
scanf()-funktiossa numeerisen tiedon (int, float) lukeminen päättyy merkkiin, joka ei ole luku (float hyväksyy myös desimaalipisteen).
Luvun edessä voi olla välilyöntejä, sarkainmerkkejä tai rivinvaihtoja.
Jos ohjelmassa luetaan merkkitietoa (char), ohjelma tulkitsee kaikki näppäimenpainallukset (myös välilyönnit) merkeiksi.
Esimerkkejä
Yhden kokonaisluvun lukeminen käyttäjältä:
Code Block |
---|
int Luku; printf("Anna jokin luku: "); |
...
scanf("%d", &Luku); |
...
Sadan merkin merkkijonon lukeminen käyttäjältä:
Code Block |
---|
char Merkkeja |
...
[ |
...
101]; // viimeinen merkki, 101. merkki on varattu lopettavalle NULL-merkille. printf("Anna merkkejä. max 100: |
...
");
|
...
scanf("%s", Merkkeja); |
...
scanf()-funktiolla voidaan myös kysellä useita asioita samalla kertaa:
Code Block |
---|
scanf("%s %d", Merkkeja, &luku); |
Merkkeja-muuttujan eteen ei laiteta &-merkkiä, koska se on jo osoite merkkijonoon. (Taulukon nimi on aina osoitin taulukon alkuun).
Huom! scanf ottaa aina parametrikseen muuttujan osoitteen ja siksi scanf()-funktion kanssa kannattaa olla hyvin varovainen, jos ohjelman käyttäjä antaa esimerkiksi lukua kysyttäessä kirjaimen, todennäköisesti ohjelma "kaatuu", ellei käyttäjän antamia syötteitä tarkasteta.