003
23.09.2003, 23:35 Uhr
Pablo
Supertux (Operator)
|
Wie wäre es damit?
C++: |
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <malloc.h>
int key_pos(int key, int length){ return key % length; }
int main() { int i, laenge, key, pos, *hash_tabelle; char folge[1024], *eingabe; printf("Geben Sie eine Folge von positiven ganzen Zahlen durch \" \" getrennt ein:\n"); scanf("%[^\n]s", folge); printf("Geben Sie die Anzahl der Schlüssel ein: "); scanf("%d", &laenge); hash_tabelle = (int*) malloc(sizeof(int)*laenge); if (hash_tabelle == NULL) { fflush(stderr); fprintf(stderr, "Upsssss. Mangel an Speicher...\n"); return 1; } // die hash-tabelle hat überall -1 als leer for(i=0; i<laenge; ++i) hash_tabelle[i]=-1;
eingabe = strtok(folge, " "); i=0; while(eingabe != NULL) { key = atoi(eingabe); pos = key_pos(key, laenge); while(hash_tabelle[pos] != -1) { --pos; if (pos == -1) pos = laenge-1; } hash_tabelle[pos] = key; eingabe = strtok(NULL, " "); }
printf("| "); for(i=0; i<laenge; ++i) printf("%d | " , hash_tabelle[i]); printf("\n");
free(hash_tabelle); }
|
Gib 12 4 5 7 56 9 5 4 7 1 10 Ausgabe: | 7 | 4 | 12 | 5 | 4 | 5 | 56 | 7 | 1 | 9 |
Bearbeitung: |
Oder 1 2 3 4 5 5 Ausgabe: | 5 | 1 | 2 | 3 | 4 |
Ich hab zuerst so versucht:
C++: |
printf("Geben Sie die Anzahl der Schlüssel ein: "); scanf("%d", &laenge); printf("Geben Sie eine Folge von positiven ganzen Zahlen durch \" \" getrennt ein:\n"); scanf("%[^\n]s", folge);
|
Wieso wird die zweite scanf Anweisung übersprungen? Die wird nicht ausgeführt. Aber wenn ich [^\n] lösche, dann wird sie nicht übersprungen. Wieso?
|
-- A! Elbereth Gilthoniel! silivren penna míriel o menel aglar elenath, Gilthoniel, A! Elbereth! Dieser Post wurde am 23.09.2003 um 23:39 Uhr von Pablo Yanez Trujillo editiert. |