Toon posts:

[C] while lus probleem bij inlezen karakter *

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoi allemaal,

Met school zijn we dit jaar begonnen met het leren van de programmeertaal C. Voor deze week hadden we een opdracht gehad met structures en file operaties. Alles lukt me wel, maar ik stuit op 1 probleempje, en ik kom er maar niet uit hoe dat kan.

Hier de stuk uit mijn code die het probleem geeft:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>  // getchar()

void main (void)
{
    char ch = 'j';

    while (ch == 'j')
    {
        printf("Lus opnieuw uitvoeren? ");
        // ... code...
        scanf("%c",&ch);
        // ch = getchar();
    }
}

Het probleem: Ik vraag dus om de lus opnieuw te starten, door het inlezen van 'j' of 'n' in de char ch. Echter, het programmatje geeft mij helemaal niet de mogelijkheid om j of n in te typen, het stopt gewoon. De lus wordt bijgevolg maar 1 keer uitgevoerd, omdat ik hem geen tweede (of meerdere keren) keer kan laten uitvoeren, want hij vraagt niet om de input. Dit heb ik zowel met de "scanf functie", als met de "getchar" uit conio.h.

Weet iemand hoe dat komt? Volgens mij lijkt dit op een compiler bugje? Ik heb al geprobeerd de buffer te legen, door "fflush(stdin);" te typen voor de scanf/getchar functie: geen effect.

Verwijderd

haal die & eens weg, misschien werkt dat? & was toch alleen voor int ? :?

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 13-09 23:11
Op vrijdag 15 februari 2002 18:56 schreef DiEana het volgende:
Hier de stuk uit mijn code die het probleem geeft:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>  // getchar()

void main (void)
{
    char ch = 'j';

    while (ch == 'j')
    {
        printf("Lus opnieuw uitvoeren? ");
        // ... code...
        scanf("%c",&ch);
        // ch = getchar();
    }
}
1) 't Is int main( void ), void main( void ) is fout.
2) In C krijg je geen karakter totdat je return indrukt.
3) getc() is de geijkte functie om een karakter te lezen.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


Verwijderd

Topicstarter
Op vrijdag 15 februari 2002 18:59 schreef Sacrine het volgende:
haal die & eens weg, misschien werkt dat? & was toch alleen voor int ? :?
Euh neen zeker, de scanf vereist het adres van de variabele, niet de waarde. Dus of het nu een int, een float of een char is, dat maakt toch niet uit?

Ik zal het toch maar even proberen hoor :) Bedankt!

EDIT: Yup, error, zoals ik wel dacht :7

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19

D2k

tis zeker weten geen C bug
heb de titel ff gefixt
verder is mijn reply niet echt inhoudelijk sterk want MSalters was me voor :P

Doet iets met Cloud (MS/IBM)


Verwijderd

Topicstarter
Op vrijdag 15 februari 2002 19:00 schreef MSalters het volgende:

[..]

1) 't Is int main( void ), void main( void ) is fout.
2) In C krijg je geen karakter totdat je return indrukt.
3) getc() is de geijkte functie om een karakter te lezen.
1) Wij hebben in de cursus altijd void main (void) gezien, maar daar wil ik je best op geloven.
2) Hoe bedoel je? Natuurlijk moet ik op enter duwen. Als ik geen enter wil gebruiken, moet ik de getch() of de getche() functie gebruiken, toch?
3) Euh, die functie hebben wij niet gezien, dus ik denk dat wij die ook niet mogen gebruiken..

Bedankt!

Verwijderd

Topicstarter
Op vrijdag 15 februari 2002 19:03 schreef D2k het volgende:
tis zeker weten geen C bug
heb de titel ff gefixt
verder is mijn reply niet echt inhoudelijk sterk want MSalters was me voor :P
Ok, bedankt... ik dacht dat het een bug zou kunnen zijn :)

Verwijderd

Topicstarter
Ik heb nog even wat getest.

hier doet hij het wel:
ch = getch();
ch = getche();

hier doet hij het niet:
ch = getchar();
scanf("%c",&ch);

MAAR.. die functies die het wel doen, vereisen geen enter nadat je j of n ingevuld hebt, en dat wil ik nu net...
Pagina: 1