Il discorso è molto semplice: se hai delle funzioni per leggere e scrivere in "formato utente" (senza possibilità di override) devi usarle solo per la GUI, e stare attento a non usarle per compiti apparentemente simili ma che non devono essere influenzati dalle preferenze, come ad esempio la scrittura/lettura da formati file testuali.

Mi spiego meglio con un esempio: nella libreria C esiste il concetto di "locale". Il "locale" ha come idea il contenere le impostazioni di formattazione di numeri, date, valuta, ... preferite per l'utente. In Italia, ad esempio, vogliamo i numeri con la virgola come separatore decimale, il punto (o l'apostrofo) come eventuale separatore delle migliaia, il simbolo € e due decimali per la valuta, le date in formato GG/MM/AAAA, l'ora in formato 24h, eccetera; in America invece si usa il punto come separatore decimale, la virgola per le migliaia, $ e due decimali per la valuta, le date in formato MM/GG/AAAA, l'ora in formato AM/PM.
Ora, le funzioni di input, di output e di parsing di default (scanf, printf, strtod, ...) sono sensibili al locale: se viene impostato il locale italiano, una printf("%g\n", 1234.5) stamperà "1234,5" (o 1.234,5, dipende da un po' di cose); alla stessa maniera, scanf("%g", &var) e strtod riconosceranno il formato italiano e non più quello di default (il "locale C").

Tutto questo andrebbe bene se le funzioni in questione fossero usate solo per l'interazione con l'utente; il problema è che in C queste sono le uniche funzioni fornite per la stampa e il parsing dei numeri (che, nel caso dei numeri in floating point, è un problema molto meno banale di quanto si creda), per cui molto più spesso vengono usate per la scrittura e la lettura di formati testuali ma pensati per essere letti da altri programmi (ad esempio CSV o similari), dove quello che si vuole è avere una rappresentazione testuale univoca dei dati, e non influenzata dalle impostazioni internazionali. Di conseguenza, a memoria d'uomo nessuno ha mai usato davvero il locale (specie il facet riguardante la formattazione dei numeri decimali), perché è praticamente certo che se lo si tocca si rompe qualcosa.

Di conseguenza quello che ti dicevo sopra: stai attento a separare bene le funzioni pensate per la formattazione destinata all'utente (che devono seguire le impostazioni personalizzate) e quelle per scrittura/parsing di dati testuali ma pensati per essere machine-readable (e che quindi non devono essere influenzati dalle impostazioni custom).