Moi, je serais toi, je chargerais tout en mémoire, une fois pour toute
Un tableau de char* de 2 colonnes par NB lignes.
L´inconvénient, c´est qu´il faut réallouer si tu ne connais pas NB, ou alors faire 2 passes...
Ensuite, une fois que tu as ça en mémoire, tu cherches la clé voulue (1ere colonne) et tu récupéres la 2e colonne, et, au besoin, tu fais un atoi ou atof.
Il est a noter que ce probleme est typiquement un truc qu´on résoudra avec une "map" : contenaire associatif, mais C++ (donc pas ce que tu veux) (au pire, tu reprogrammes la map)
std::map<std::string,std::string> M;
L´avantage serait de ne pas avoir besoin de faire 2 passes pour récupérer les NB données, meme si inconnues au départ, et qu´ensuite, la recherche de clé (1ere colonne) s´effectue en
O(log2 N) car la map garde les éléments triés et procede a des recherches dichotomiques.