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

[C] isalpha() & isdigit() functies

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb hier een probleem en geraak er maar niet uit! Volgens mij is het iets simpel maar ben er al ettelijke uren mee bezig :(

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int getal;
int controle = 0;

while(controle != 1) {
       printf("Geef getal in: ");
       scanf("%d", &getal);
  if(!isdigit(getal)){
          printf("Het is een getal");
          controle++;
          fflush(stdin);}
     else{
          printf("Het is geen getal");
          fflush(stdin);}
}


Probleem is, wat ik ook intyp, ik krijg altijd dat het een getal is. Heb dan eens gedebugged, dat getal laten weergeven, en blijkbaar neemt hij voor welke letter dat ik ook intyp, het getal 8. Als ik nu intyp "hallo" dan wordt het nummer 8 opgeslagen in getal. Hoe komt dat? Ik dacht dat hij de ASCII waarde ging opslaan van de letter, en dat ik dan zo zou kunnen casten naar een char en daarop de isalpha() functie op toepassen, maar dit gaat nu niet. Iemand een idee'tje hoe ik verder kan om te checken of als de gebruiker een getal heeft ingevoerd of iets anders?

  • CyBeR
  • Registratie: September 2001
  • Niet online

CyBeR

💩

Je vraagt om een %d op te slaan in een int. Denk daar eens over na.

Let ook eens op de returnwaarde van scanf, waar je niks mee doet.

[ Voor 33% gewijzigd door CyBeR op 16-12-2007 15:11 ]

All my posts are provided as-is. They come with NO WARRANTY at all.


Verwijderd

Argh, het gaat weer niet goed vandaag, ik had inderdaad niet gedacht aan de returnwaarde van scanf :) Zo gaat hij perfect:

code:
1
2
3
4
5
while(res != 1){
    printf("Geef getal in: ");
    res = scanf("%d", &getal);
    fflush(stdin);
   }

[ Voor 6% gewijzigd door Verwijderd op 16-12-2007 16:03 ]


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 05:14
Weet je het zeker? Heb je al eens geprobeerd om geen getal in te vullen?

Verder: wat denk je met fflush(stdin); te bereiken? Lees de documentatie er nog eens op na. ;) (Of bedoelde je fflush(stdout);? Daar kan ik me in principe nog wel iets bij voorstellen.

[ Voor 62% gewijzigd door Soultaker op 16-12-2007 18:50 ]


  • froggie
  • Registratie: November 2001
  • Laatst online: 20-11-2024

froggie

Kwaaak

Een beetje aanvullend op Soultaker's reactie (en wellicht wijsneuzerig en ten overvloede ;)); ik krijg het idee dat je lines wegschrijft naar stdout. Het is dan net zo handig om "\n" aan het eind van je printf statement op te nemen, dit impliceert standaard een flush. Dit kun je met setvbuf aanpassen (om bijv ongebufferde output te realiseren).

Verwijderd

Topicstarter
Ja probleem was dat als de gebruiker geen getal ingeeft, hij oneindig looped, dus hij gebruikt dan waarschijnlijk die 'enter' van de gebruiker als input. Met die fflush(stdin); smijt alles in de buffer weg dacht ik? Zo werkt alles nogtans perfect.

Edit: Niet echt bijkomend vraagje, maar weet iemand hoe ik met geluiden kan werken in C? Ik gebruik Borland als compiler. Ik kan met kleuren werken, door het platform op DOS Standard te zetten, daar is gewoon een functie voor zoals textbackground(BLUE); bijvoorbeeld. Maar ik vind nergens hoe ik met geluidjes kan werken, ik heb het wel al eens gezien maar zou niet weten hoe.

Edit2: Ik weet hoe ik een bepaalde frequency kan afspelen met de functie sound, maar ik bedoelde dus om bijvoorbeeld een .wav file'tje te afspelen bij een event?

[ Voor 54% gewijzigd door Verwijderd op 17-12-2007 12:29 ]

Pagina: 1