Explications code c
surame
-
mype Messages postés 2435 Date d'inscription Statut Membre Dernière intervention -
mype Messages postés 2435 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'ai trouvé le programme C ci-dessous qui permet de saisir 5 mots et de les inverser.
Il fonctionne très bien.
Mais je n'arrive pas à comprendre les lignes du code source suivantes et surtout la necessité
de la décrémentation P2--.
/* Placer P2 à la fin de la chaîne */
while (*P2)
P2++;
P2--; /* sinon '\0' est placé au début de la chaîne */
Est ce quelqu'un peut m'éclairer sur ce point?
Merci.
/* Programme complet */
/*** Ce programme permet de saisir 5 mots et de les inverser ***/
include <stdio.h>
main()
{
/* Déclarations */
char TABCH[5][51];/* tableau de chaînes de caractères */
char AIDE; /* pour la permutation des caractères */
char *P1, *P2; /* pointeurs d'aide */
int I; /* indice courant */
/* TABCH+I est l'adresse de la I-ième chaîne du tableau */
/* Il vaut mieux convertir TABCH+I en pointeur sur char */
/* Saisie des données */
printf("Entrez 5 mots :\n");
for (I=0; I<5; I++)
{
printf("Mot %d (max.50 caractères) : ", I);
gets((char *)(TABCH+I));
}
/* Inverser l'ordre des caractères à l'intérieur des mots */
for (I=0; I<5; I++)
{
P1 = P2 = (char *)(TABCH+I);
/* Placer P2 à la fin de la chaîne */
while (*P2)
P2++;
P2--; /* sinon '\0' est placé au début de la chaîne */
while (P1<P2)
{
AIDE = *P1;
*P1 = *P2;
*P2 = AIDE;
P1++;
P2--;
}
}
/* Affichage des mots inversés */
for (I=0; I<5; I++)
puts((char *)(TABCH+I));
return 0;
}
J'ai trouvé le programme C ci-dessous qui permet de saisir 5 mots et de les inverser.
Il fonctionne très bien.
Mais je n'arrive pas à comprendre les lignes du code source suivantes et surtout la necessité
de la décrémentation P2--.
/* Placer P2 à la fin de la chaîne */
while (*P2)
P2++;
P2--; /* sinon '\0' est placé au début de la chaîne */
Est ce quelqu'un peut m'éclairer sur ce point?
Merci.
/* Programme complet */
/*** Ce programme permet de saisir 5 mots et de les inverser ***/
include <stdio.h>
main()
{
/* Déclarations */
char TABCH[5][51];/* tableau de chaînes de caractères */
char AIDE; /* pour la permutation des caractères */
char *P1, *P2; /* pointeurs d'aide */
int I; /* indice courant */
/* TABCH+I est l'adresse de la I-ième chaîne du tableau */
/* Il vaut mieux convertir TABCH+I en pointeur sur char */
/* Saisie des données */
printf("Entrez 5 mots :\n");
for (I=0; I<5; I++)
{
printf("Mot %d (max.50 caractères) : ", I);
gets((char *)(TABCH+I));
}
/* Inverser l'ordre des caractères à l'intérieur des mots */
for (I=0; I<5; I++)
{
P1 = P2 = (char *)(TABCH+I);
/* Placer P2 à la fin de la chaîne */
while (*P2)
P2++;
P2--; /* sinon '\0' est placé au début de la chaîne */
while (P1<P2)
{
AIDE = *P1;
*P1 = *P2;
*P2 = AIDE;
P1++;
P2--;
}
}
/* Affichage des mots inversés */
for (I=0; I<5; I++)
puts((char *)(TABCH+I));
return 0;
}
A voir également:
- Explications code c
- Code ascii - Guide
- Code puk bloqué - Guide
- Comment déverrouiller un téléphone quand on a oublié le code - Guide
- Code activation windows 10 - Guide
- Code blocks - Télécharger - Langages
5 réponses
Bonjour,
Rappel : en C une chaîne se termine par '\0'
La boucle while(*P2) s'arrête donc lorsque *P2 == '\0'
Si on ne recule pas le pointeur, la boucle suivante commencera donc avec '\0'...et la chaîne résultante sera interprétée comme vide.
Rappel : en C une chaîne se termine par '\0'
La boucle while(*P2) s'arrête donc lorsque *P2 == '\0'
Si on ne recule pas le pointeur, la boucle suivante commencera donc avec '\0'...et la chaîne résultante sera interprétée comme vide.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question