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 ---
Forum général sur le langage C !

Modérateur : Jérémy

bizarrerie autour du while
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2133
Âge : 71
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#1 Message par paulfjujo » dim. 12 juin 2022 18:53

bonsoir,


suite à une remarque que j'ai emise sur le forum mikroC
et une reponse ne corroborant pas ma remarque..
j'ai fait un test
"Stupeur et tremblement" comme dira N.Nothomb
j'ai faux !

quelqu'un pourrait m'expliquer pourquoi ces 2 versions
GSMcmd1 et GSMcmd2 se comportent d'une façon identique ?
car pour moi, il manque dans la version GSMcmd1 , des parentheses pour encadrer la boucle while!
=> tomberait en marche que pour un string de 1 seul char
mais problemo si plusieurs char dans la chaine
et non ?


Code : Tout sélectionner


void GSMcmd1
(char *ch)
{
while(*
ch)
if (UART1_Tx_Idle() == 1)
UART1_Write(*ch++);
UART1_Write(0x0D); // Send CR - command terminate character
}


void GSMcmd2(char *ch1)
{
while(*
ch1)
{
if (UART1_Tx_Idle() == 1)
UART1_Write(*ch1++);
}
UART1_Write(0x0D); // Send CR - command terminate character
}


programme de test ci joint projet zippé
_18F26K22_UART1_test_while.zip



resultats identiques ?

Test #1 GSMcmd1 cde avec 1 seul char
AT+CMGS="+381658025017"<CR>
Test #1 GSMcmd1 cde avec plusieurs char
txt
AT+CMGS="+381632198765"<CR>
GSMcmd1
AT+CMGS="+381632198765"<CR><CR>

Test GSMcmd2
txt
AT+CMGS="+381632198765"<CR>
GSMcmd2
AT+CMGS="+381632198765"<CR><CR>

Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Aides toi, le ciel ou FantasPic t'aideras

bizarrerie autour du while
satinas
Confirmé
Confirmé
Messages : 914
Enregistré en : novembre 2015

#2 Message par satinas » dim. 12 juin 2022 20:47

Bonsoir à tous

Ce n'est pas bizarre, Paul, les deux codes se comportent de la même manière.
En C derrière if, do, for, while on met soit une instruction, soit un bloc. Une instruction se termine sur un point-virgule, un bloc sur une accolade fermante. Le bloc renferme 0 ou 1 ou plusieurs instructions et peut posséder des variables locales.
Dans le premier cas, le if se termine par un point-virgule, le while par le même point-virgule.
Dans le second cas, le if se termine par un point-virgule, le while par une accolade fermante.
Mais comme l'accolade fermante est juste après le point-virgule, le résultat est le même.
De l'importance de l'indentation pour afficher clairement tout cela.

Même si ce n'est pas recommandé, j'aime bien faire du compact, cela évite l'indentation.

Code : Tout sélectionner

void GSMcmd1(char *ch)
{
  while (*ch) if (UART1_Tx_Idle()) UART1_Write(*ch++);
  UART1_Write(0x0D); // Send CR - command terminate character
}

J'aurais écrit ça en moins élégant, mais sans test superflu sur le (*ch)

Code : Tout sélectionner

void GSMcmd1(char *ch)
{
  while (*ch) {
    while (!UART1_Tx_Idle()) { }
    UART1_Write(*ch++);
  }
  UART1_Write(0x0D); // Send CR - command terminate character
}


PS: Aujourd'hui j'ai été preum's à Pedantix, et pas peu fier car il y a du monde, merci google :)
https://cemantix.herokuapp.com/pedantix

bizarrerie autour du while
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2133
Âge : 71
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#3 Message par paulfjujo » lun. 13 juin 2022 13:07

bonjour Satinas,

Merçi pour ta réponse.

En effet, je préfere , et de loin, l'usage d'accolades et l'indentation
qui léve tout doute , en présentant une clarté de lecture..
d'autant que beaucoup d'interface IDE , montrent justement l'alignement de ces identations ou surlignage en couleur des accolades
comme MikroC ou Visual Studio code par exemple.

:shock: à quand la programmation style sms !

interessant ce pedantix ... mais pas encore tout compris les regles ..
Aides toi, le ciel ou FantasPic t'aideras

bizarrerie autour du while
satinas
Confirmé
Confirmé
Messages : 914
Enregistré en : novembre 2015

#4 Message par satinas » mer. 15 juin 2022 08:49

Bonjour

Un cas particuler avec la boucle do while :
int b=1, c=0;
if (b) do c++; while (c<5);
Le if va jusqu'au 2ème point-virgule

Pour Pedantix, tu dois deviner le titre d'une page wikipedia.
Il faut commencer à essayer articles, conjonctions, prépositions, ensuite essayer de trouver le thème.
On peut tricher en recherchant avec google un morceau de phrase déjà trouvé, c'est compréhensible quand on tourne en rond :)
Il y en a qui trouvent en moins d'1 minute, il doit y avoir des moulinettes software qui tournent.
C'est pas hors sujet, car un pic programmé en C fait dring dring à 11h59, heure du début du jeu :)


Retourner vers « Langage C »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 10 invités