Bienvenue aux nouveaux arrivants sur FantasPic !
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
Modérateur : Jérémy
Fonction comme parametre de condition
-
Jérémy
Administrateur du site- Messages : 2723
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Bonjour à tous,
Toujours sur mon module GSM, j'ai repris depuis le debut !
Une fonction me turlupine car je n'arrive pas à la simplifier
Voici la fonction d'origine
En paramètre on lui dit la réponse que l'on attend
On va chercher la réponse et on la place dans la variable "test".
Si cette réponse est égale a la réponse attendue ou on reçoit une erreur alors on sort, sinon on attend encore !
Plutôt bien fait mais je pense qu'on doit pouvoir raccourcir .
je pensais faire comme cela en pensant que ça revenait au même mais apparemment non car car ne fonctionne pas !
Tant que la réponse est différente de celle attendue ET différente d'erreur alors je boucle!
Je me demande si ce n'est pas a cause de la fonction qui est deux fois dans les conditions de test !
Qu'en pensez vous ?
Merci
Toujours sur mon module GSM, j'ai repris depuis le debut !
Une fonction me turlupine car je n'arrive pas à la simplifier
Voici la fonction d'origine
Code : Tout sélectionner
//------------------------------------------------------------------------------
// Get GSM response, if there is any
short Get_response() {
if (response_rcvd) { // Si il y a une reponse qui est finie (flag levé)
response_rcvd = 0; // RAZ du flag
return responseID; // On renvoie l'identification de la réponse
}
else
return -1; // Sinon on renvoie -1
}
// Attente de la réponse du GSM (boucle infinie)
void Wait_response(char rspns) {
char test = 1;
while (test){
test = Get_response();
if ((test == rspns) || (test == GSM_ERROR))
test = 0;
else
test = 1;
}
}
En paramètre on lui dit la réponse que l'on attend
On va chercher la réponse et on la place dans la variable "test".
Si cette réponse est égale a la réponse attendue ou on reçoit une erreur alors on sort, sinon on attend encore !
Plutôt bien fait mais je pense qu'on doit pouvoir raccourcir .
je pensais faire comme cela en pensant que ça revenait au même mais apparemment non car car ne fonctionne pas !
Tant que la réponse est différente de celle attendue ET différente d'erreur alors je boucle!
Code : Tout sélectionner
//------------------------------------------------------------------------------
// Attente de la réponse du GSM (boucle infinie)
void Wait_response(char rspns) {
while ( (Get_response() != rspns) && (Get_response() != GSM_ERROR) );
}
Je me demande si ce n'est pas a cause de la fonction qui est deux fois dans les conditions de test !
Qu'en pensez vous ?
Merci
Fonction comme parametre de condition
-
Jérémy
Administrateur du site- Messages : 2723
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
J'ai trouvé une piste mais je comprends pas trop pourquoi ça ne fonctionne pas avec ma première solution .
Comme ceci ça fonctionne : pensez vous que ce soit fonctionnel !
Comme ceci ça fonctionne : pensez vous que ce soit fonctionnel !
Code : Tout sélectionner
//------------------------------------------------------------------------------
// Attente de la réponse du GSM (boucle infinie)
void Wait_response(char rspns) {
while ( (Get_response() != (rspns && GSM_ERROR) ) );
}
Fonction comme parametre de condition
Jérémy a écrit :J'ai trouvé une piste mais je comprends pas trop pourquoi ça ne fonctionne pas avec ma première solution .
Comme ceci ça fonctionne : pensez vous que ce soit fonctionnel !Code : Tout sélectionner
//------------------------------------------------------------------------------
// Attente de la réponse du GSM (boucle infinie)
void Wait_response(char rspns) {
while ( (Get_response() != (rspns && GSM_ERROR) ) );
}
Hello,
non ça ne fonctionne pas, les deux expressions sont différentes car il n'y a pas de distributivité sur les opérateurs utilisés.
ta fonction Get_response() retourne un résultat qui est dépendant d'une variable qui est elle-même modifiée dans cette fonction : deux appels successifs à cette fonction peuvent donc donner des résultats différents, c'est le cas dans ton bout de code :
Code : Tout sélectionner
while ( (Get_response() != rspns) && (Get_response() != GSM_ERROR) );
il ne faut faire qu'un seul appel à cette fonction, et stocker le résultat dans une variable intermédiaire. pour cela il faut remplacer le bloc while par un bloc do...while :
Code : Tout sélectionner
//------------------------------------------------------------------------------
// Attente de la réponse du GSM (boucle infinie)
void Wait_response(char rspns) {
do
{
char rep ;
rep = Get_response() ;
}
while ( (rep != rspns) && (rep != GSM_ERROR) );
}
Fonction comme parametre de condition
-
Jérémy
Administrateur du site- Messages : 2723
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Génial ca !
Que penses-tu de ma deuxième solution car j'ai un doute sur mes conditions ?
Que penses-tu de ma deuxième solution car j'ai un doute sur mes conditions ?
Code : Tout sélectionner
//------------------------------------------------------------------------------
// Attente de la réponse du GSM (boucle infinie)
void Wait_response(char rspns) {
while ( (Get_response() != (rspns && GSM_ERROR) ) );
}
Fonction comme parametre de condition
Jérémy a écrit :Génial ca !
Que penses-tu de ma deuxième solution car j'ai un doute sur mes conditions ?Code : Tout sélectionner
//------------------------------------------------------------------------------
// Attente de la réponse du GSM (boucle infinie)
void Wait_response(char rspns) {
while ( (Get_response() != (rspns && GSM_ERROR) ) );
}
voir dans ma réponse ci-dessus, ça ne marchera pas.
il suffit de prendre un contre exemple :
supposons que get_response() retourne 1 (lors des deux appels successifs), rspns égale 2 et GSM_ERROR égale 3 :
la première expression :
(Get_response() != rspns) && (Get_response() != GSM_ERROR)
donnera :
(1 != 2) && (1 != 3)
= (true && true)
= true
alors que l'expression :
Get_response() != (rspns && GSM_ERROR)
donnera :
(1 != (2 && 3)) = (true != (true && true))
= true != true
= false
ces deux expressions ne sont donc pas identiques
Fonction comme parametre de condition
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 81 invités