Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C: scanf ja rivinvaihto

Liquid_Vision [23.10.2007 13:51:26]

#

scanf-funktionhan ei pitäisi lukea lopussa olevaa rivinvaihtomerkkiä? Miksi sitten kyseinen koodi ei toimi niinkuin pitäisi:

scanf("%s", buffer);
scanf("%d", &i); // eli tämän pitäisi lukea puskurissa oleva rivinvaihto, mutta se odottaakin käyttäjältä syötettä. Eikä rivinvaihtoa lueta bufferiinkaan, joten mitä sille tapahtuu?

Ja toinen kysymys vielä että voiko fgets():lle antaa jotain parametriä jolla se ei lukisi käyttäjän painamaa entteriä bufferiin?

pukki [23.10.2007 16:07:34]

#

Jos fgets()-funktiota käyttää, niin voihan sen rivinvaihdon sieltä aika vaivattomasti korvata vaikka 0-tavulla., tyyliin

buf[strlen(buf)-1] = '\0';

Voisiko tuossa jälkimmäisessä scanf():ssä olla vika siinä, että se odottaa integeriä käyttämän syöttämänä merkkijonona.

Liquid_Vision [23.10.2007 16:37:44]

#

Ei, koska esim. tässä toinen scanf juuri lukee rivinvaihdon:

scanf("%d", &i);
scanf("%d", &j);

Edit: Näyttää siltä, että se rivinvaihtomerkki vain ohitetaan, eikä se jää näppäimistöpuskuriin. Jos näin on niin, on kyllä erikoinen logiikka, kun kaikissa muissa(%d, %c, jne) se jää sinne näppäimistöpuskuriin kummittelemaan.

Metabolix [23.10.2007 18:14:25]

#

Jää se, mistä oikein noin päättelet? %d lukee kokonaisluvun ja siis ohittaa kaikki edeltävät tyhjät kuten välit ja rivinvaihdot. Rivinvaihtomerkin voit sen sijaan lukea char-tyyppiseen muuttujaan %c-formaatilla tai scansetillä.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta