#include "math.h" #include "stdio.h" #include //////////////////////////////////////////////////////////////////////// char parseFloatField(char c, float * ptr_val, unsigned char * ptr_count, unsigned char * ptr_dp_count) //La fonction renvoie 0 tant que le décodage n'est pas terminé // 1 lorsque le décodage est terminé correctement // -1 lorsque le décodage a échoué //val est mis à NAN si la chaine décodée est "," { if (c >= '0' && c <= '9') { (*ptr_val) *= 10; (*ptr_val) += c - '0'; (*ptr_count) = (*ptr_count) + 1; return 0; } else if (c == '.') { (*ptr_count) = 0; (*ptr_dp_count) ++ ; return 0; } else if (c == ',') { if ( ((*ptr_count) ==0) && ((*ptr_dp_count) ==0) ) { (*ptr_val) =NAN; // faire un #include return 1; //OK } while ((*ptr_count) > 0 && (*ptr_dp_count) > 0) // équiptr_valent à (*ptr_val) = (*ptr_val)/(10^*count) { (*ptr_val) = (*ptr_val) / 10; (*ptr_count) = (*ptr_count) - 1; } if((*ptr_dp_count) > 1) return -1 ; (*ptr_count) = 0 ; (*ptr_dp_count) = 0 ; return 1; } else // caractère non supporté dans un nombre { (*ptr_count) = 0; return -1; } } //////////////////////////////////////////////////////////////////////// struct jeuTestParseFloatField{ char * chaine; float resAttendu; char retAttendu; float resObtenu; char retObtenu; bool ok; }; //////////////////////////////////////////////////////////////////////// #define EPS 0.000001 #define NBTESTS 40 jeuTestParseFloatField test[NBTESTS]; char chaine1[10]="123.456,\0"; char chaine2[10]="789,\0"; char chaine3[10]=".45,\0"; char chaine4[10]=".,\0"; char chaine5[20]="123.456.789,\0"; char chaine6[10]="78a9,\0"; char chaine7[10]=",\0"; //////////////////////////////////////////////////////////////////////// void testParseFloatField(){ test[0].chaine=chaine1; test[0].resAttendu=123.456; test[0].retAttendu=1; test[1].chaine=chaine2; test[1].resAttendu=789; test[1].retAttendu=1; test[2].chaine=chaine3; test[2].resAttendu=.45; test[2].retAttendu=1; test[3].chaine=chaine4; test[3].resAttendu=0; test[3].retAttendu=1; test[4].chaine=chaine5; test[4].retAttendu=-1; test[5].chaine=chaine6; test[5].retAttendu=-1; test[6].chaine=chaine7; test[6].resAttendu=NAN; test[6].retAttendu=1; //génération de valeurs aléatoires pour compléter le test for (int nn=7;nn