Wiki Markup |
---|
h3. scanf()-funktio |
...
scanf-funktiolla voidaan syöttää tietoa ohjelman muuttujille: |
...
{code |
} scanf("muotoilumerkkijono", muuttujan1_osoite, muuttujan2_osoite, ...); {code} , 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="a7dca7d0-9458-42f4-96d9-d3fc4a7e7859"><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 |
---|
|| muotoilu || tyyppi || selitys ||
| %c | char/int | yksi merkki |
| %s | char\[\] | merkkijono (päättyy NULL-merkkiin) |
| %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}
scanf(... , &Muuttuja); // &-merkin avulla saadaan muuttujan osoite luettua.
|
Lukemisen päättyminen
{code} h4. 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 |
---|
h3. Esimerkkejä Yhden kokonaisluvun lukeminen käyttäjältä: {code} int Luku; printf("Anna jokin luku: "); scanf("%d", &Luku); {code} Sadan merkin merkkijonon lukeminen käyttäjältä: |
...
{code |
} char Merkkeja[101]; // viimeinen merkki, 101. merkki on varattu lopettavalle NULL-merkille. printf("Anna merkkejä. max 100: "); scanf("%s", Merkkeja); {code} scanf()-funktiolla voidaan myös kysellä useita asioita samalla kertaa: |
...
{code |
}
scanf("%s %d", Merkkeja, &luku);
|
...
{code} _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. |