Hello,
Voor een opdracht voor school moet ik een 2 dimensionele sorteren met de qsort() functie om daarna verschillende waardes uit de array op te vragen met bsearch().
Het is de bedoeling dat de gebruiker het nummer van een boot opgeeft en zo het nummer van de kade te weten komt waar die boot ligt aangemeert.
Dit is het programma:
de qsort-functie doet zijn werk perfect. Maar als ik een waarde ingeef voor a (maw. één van de bootnummers), returned bsearch altijd NULL...
Ik zit me hier al een uurtje op blind te staren, zonder de fout te zien.
Ik heb al wel geprobeerd om de vgli-functie op kadenummers te laten schikken en dan een kadenummer in te geven. Dan werkt de bsearch-functie wél. Maar het moet nu eenmaal met de bootnummers...
Voor een opdracht voor school moet ik een 2 dimensionele sorteren met de qsort() functie om daarna verschillende waardes uit de array op te vragen met bsearch().
Het is de bedoeling dat de gebruiker het nummer van een boot opgeeft en zo het nummer van de kade te weten komt waar die boot ligt aangemeert.
Dit is het programma:
C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
| # include <stdio.h> # include <stdlib.h> int vgli(const void*, const void*); typedef struct { int kadenr; int bootnr; } BOOT; int main(void) { BOOT boten[] = { {4,25}, {3,20}, {2,35}, {1,30} }; int i, a; BOOT *p; qsort(boten, 4, sizeof(BOOT), vgli); printf("kadenr\tbootnr\n------\t------\n"); // controleer of qsort juist was for(i = 0; i < 4; i++) { printf("%3d\t%4d \n", boten[i].kadenr, boten[i].bootnr); } scanf("%d", &a); // geef een nummer in p = bsearch(&a, boten, 4, sizeof(BOOT), vgli); // zoek nummer if(p) // als nummer gevonden is { printf("\nBoot:%d KadeNr.:%d", p->bootnr, p->kadenr); // geef bootnummer & kadenummer } else { printf("\nBoot %d werd niet gevonden!", a); // geef foutbericht } return 0; } int vgli(const void *p, const void *q) // vergelijkfunctie voor qsort en bsearch { BOOT a = *(BOOT*)p; BOOT b = *(BOOT*)q; return a.bootnr - b.bootnr; // schik op bootnummers } |
de qsort-functie doet zijn werk perfect. Maar als ik een waarde ingeef voor a (maw. één van de bootnummers), returned bsearch altijd NULL...
Ik zit me hier al een uurtje op blind te staren, zonder de fout te zien.
Ik heb al wel geprobeerd om de vgli-functie op kadenummers te laten schikken en dan een kadenummer in te geven. Dan werkt de bsearch-functie wél. Maar het moet nu eenmaal met de bootnummers...