Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[c]getchar() in c cursus

Pagina: 1
Acties:

  • mpol
  • Registratie: September 2002
  • Laatst online: 15-06 22:26

mpol

root@localhost

Topicstarter
Hoi,

Ik ben begonnen in het boek The C Programming Language. Er zitten rond pagina 18 een paar eenvoudige voorbeelden met getchar(), maar ik krijg andere functionaliteit dan volgens mij omschreven staat.
Ik heb zelf wel programmeer ervaring met PHP en Bash, maar C is nieuw voor me.

Dit is de code:
C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>

countlines() {
    int c, nl;

    nl = 0;
    while ((c = getchar()) != EOF) {
        if (c == '\n') {
            nl++;
        }
    }
    printf("%d\n", nl);
}

main() {
    countlines();
}


Wat het moet doen is het aantal regels wat ingetikt wordt weergeven. Maar ik kan alleen invoeren, en heb geen idee hoe af te sluiten. Ctrl-C breekt gewoon hard af. Ik krijg dus nooit de printf() te zien. Volgens mij moet er ergens een EOF ingevoerd worden, maar hoe verwachten ze dat?
Wat doe ik verkeerd? Of is er wat veranderd sinds 1988?
Ik gebruik Linux/Debian/gcc.

https://timelord.nl


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

Het doet toch precies wat je zegt? Ga door zolang er invoer komt uit getchar() en pas als dat niet meer gebeurt begin je af te drukken. Als je wil dat er iets gebeurt als je klaar bent met tikken dan moet je een manier verzinnen om dat duidelijk te maken. Gezien het feit dat je de enter al gebruikt om te tellen kun je die niet gebruiken, dus dan zou je de keycode van de escape-knop af kunnen vangen ofzo. Maar als je dat niet regelt in je code gebeurt dat niet, nee. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • mpol
  • Registratie: September 2002
  • Laatst online: 15-06 22:26

mpol

root@localhost

Topicstarter
Ja, dat is hoe ik het ook snap. Hier wordt nooit de printf() uitgevoerd.
Maar dat is toch raar in een C cursus/boek? Zouden Brian Kernighan en Dennis Richie het echt zo bedoeld hebben? Ik ga nu dus second-guessen.

https://timelord.nl


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
NMe schreef op vrijdag 24 februari 2012 @ 15:47:
Het doet toch precies wat je zegt? Ga door zolang er invoer komt uit getchar() en pas als dat niet meer gebeurt begin je af te drukken. Als je wil dat er iets gebeurt als je klaar bent met tikken dan moet je een manier verzinnen om dat duidelijk te maken. Gezien het feit dat je de enter al gebruikt om te tellen kun je die niet gebruiken, dus dan zou je de keycode van de escape-knop af kunnen vangen ofzo. Maar als je dat niet regelt in je code gebeurt dat niet, nee. ;)
Hij hééft al een manier om te stoppen:
C:
1
while ((c = getchar()) != EOF) { 

EOF. Is dat niet CTRL-Z of CTRL-D?

[ Voor 6% gewijzigd door RobIII op 24-02-2012 15:53 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • epic007
  • Registratie: Februari 2004
  • Laatst online: 17-11 15:31
of

code:
1
linux> cat bestand.txt | jouwprogrammaexecutable

  • mpol
  • Registratie: September 2002
  • Laatst online: 15-06 22:26

mpol

root@localhost

Topicstarter
Ah, Ctrl-D.
Ik dacht dat ik ze allemaal geprobeerd had.

https://timelord.nl

Pagina: 1