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?
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.
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.
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ä.
Aihe on jo aika vanha, joten et voi enää vastata siihen.