003
30.08.2004, 08:42 Uhr
0xdeadbeef
Gott (Operator)
|
Hm. In C++ wärs einfacher, Fehler anzufangen, aber naja. Im Grunde so:
C++: |
#define MAX_MAP_SIZE 512
struct pair { int key; double value; };
struct map { struct pair field[MAX_MAP_SIZE]; size_t map_size; }
void init_map(struct map *m) { m->map_size = 0; }
/* ... */
struct map my_map; FILE *fd = fopen("datei.txt", "r"); int index = 0;
init_map(&my_map);
while(!feof(fd) && index < MAX_MAP_SIZE) { if(fscanf("%d %lf", &my_map.field[index].key, &my_map.field[index].value) != 2) { fputs("Fehler beim Einlesen!", stderr); fclose(fd); /* Beispiel für Fehlerbehandlung */ exit(-1); } } my_map.map_size = index;
/* ... */
int find_value(const struct map *m, int key, double *val) { int index; for(index = 0; index < m->map_size; ++index) { if(key == m->field[index].key) { *val = m->field[index].value; return 1; } } return 0; }
double val; if(find_value(&my_map, 123, &val)) { /* Wert gefunden, befindet sich in val */ }
|
...sowas in der Art, auch wenn man sich in der Realität wahrscheinlich aus Performancegründen keinen statischen Buffer hernehmen würde. -- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra |