Titof301
Messages postés10Date d'inscriptionsamedi 4 février 2006StatutMembreDernière intervention 5 mai 2007
-
4 mai 2007 à 23:21
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019
-
6 mai 2007 à 00:18
Bonjour a tous, j'ai une question probablement bête mais bon ( ). Est-il possible d'utiliser le contenu d'une variable int par exemple à l'intérieur d'un programme pour... hum un exemple serait plus simple...
Donc bon j'était en pleine recherche pour raccourcir mon programme, et j'ai penser à sa (et qui pourrais me servir plus tard). En gros, j'ai plusieurs fonction qui ont un nom de type V_0, V_1, V_2, etc, ET à l'intérieur de mon FOR j'utilise le i pour des fonctions. Je voulais savoir si il était possible de faire un seul appel de fonction dans le FOR en se servant de la valeur de mon i (0 à 9) pour qu'elle soit appeler à chaque passage, dans les différentes fonctions? J'ai essayer quelques trucs mais j'arrive pas... alors est-ce possible?
Titof301
Messages postés10Date d'inscriptionsamedi 4 février 2006StatutMembreDernière intervention 5 mai 2007 5 mai 2007 à 03:33
merci beaucoup!!! effectivement avec un tableau de pointeur sa fonctionne nickel
Par contre, j'ai un petit probleme d'un autre ordre.
Je ne comprends pas vraiment pourquoi (ptete la fatigue... lol)... Je veux par exemple convertir un char en int :
bool V_2(char donnees[10][16], int a)
{
if (atoi(donnees[a][0]) == 2)
return true;
else
return false;
et il me donne cette erreur :
error C2664: 'atoi' : cannot convert parameter 1 from 'char' to 'const char *'
j'ai déjà utiliser cette fonction (atoi) d'une manière un peu différente, mais là, où est le probleme?
Merci d'avance!
gagah1
Messages postés509Date d'inscriptionsamedi 28 juin 2003StatutMembreDernière intervention 3 août 2010 5 mai 2007 à 08:42
Si tu veux convertir un char en int , utilises l'operateur cast: (int)donnees[a][0];
La fonction atoi convertit une chaine de caractère càd un tableau de char terminer par un caractère NULL. Si tu veux utiliser atoi , castes comme ceci:
atoi((const char*)donnees[a][0]);
emmatopiak
Messages postés149Date d'inscriptionmercredi 28 mars 2007StatutMembreDernière intervention17 mai 20072 5 mai 2007 à 10:34
Salut,
Tu peux pas appeler directement V_i comme tu pourrais le faire dans des langages interprétés.
Ce que tu peux faire en C par contre, c'est un tableau de fonctions. La syntaxe va être complètement pourrie par contre.
Tu as des fonctions :
bool V_0(char **, char **);
Un pointeur sur cette fonction s'écrit :
bool (* V)(char **, char **);
Un tableau de pointeurs devrait s'écrire :
bool (* V[10])(char **, char **);
Au pire tu mets deux étoiles avant V plutôt que *V[10], je n'ai pas pu tester. Une fois que c'est fait, il faut initialiser ce tableau en mettant :
V[0] = V_0; V[1] = V_1; ...
Mais je me demandais si le plus simple est pas de faire passer le paramètre i en paramètre aux fonctions V_i ? Parce que le traitement de V_i doit etre dépendant du paramètres i plutot.
Ca devrait être plus simple à faire.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Titof301
Messages postés10Date d'inscriptionsamedi 4 février 2006StatutMembreDernière intervention 5 mai 2007 5 mai 2007 à 23:44
Merci a tous pour votre aide!!
pour le probleme no1 avec les V_i, j'ai réussi grace au tableau de pointeur de fonction.
Ca me donne en gros:
bool (*ptrFonction[])(char[][16], int, char [][12]) = { V_0, V_1, V_2, V_3, V_4, V_5, V_6, V_7, V_8, V_9 };
for (i=0; i<10; i++)
{
extraire_chaine(chaine,extract[i][j],extract[i][j+1],donnees, i);
if (!ptrFonction[i](donnees, i, tab_marques)) cout << donnees[i] << " n'est pas valide!!!" << endl;
}
Pour le prob no2, bah en ce moment j'ai tester ces 2 la qui marchent :
if ((donnees[a][0] - '0') == 2) (j'ai lu à quelque part le principe, je crois comprendre en gros...)
if (atoi(donnees[a]) == 2) (ca marche aussi, mais pourtant donnees[a] contient par exemple 2HN ...comment sa se fait que sa marche quand meme?)
et pour le cast, quand je fait test=int(donnees[a][0]); test contient 53 au lieu de 5 par exemple, je l'utilise mal? Je sais que les autres marchent mais le cast pourrait surement me servir un jour ou l'autre.
Titof301
Messages postés10Date d'inscriptionsamedi 4 février 2006StatutMembreDernière intervention 5 mai 2007 5 mai 2007 à 23:55
ah pendant que j'y pense, je me demande sa depuis un bout, est-ce qu'il y a un moyen de faire plusieurs comparaisons dans un if par exemple sans devoir retaper l'argument de gauche a chaque fois? du style :
if (atoi(donnees[a]) == 2 || 4 || 5 || 9)
au lieu de : if (atoi(donnees[a]) 2 || atoi(donnees[a]) == 4 || atoi(donnees[a]) == 5 || atoi(donnees[a]) == 9)