Languge C 'probleme'
Résolu
Red-Falcon
Messages postés
295
Date d'inscription
Statut
Membre
Dernière intervention
-
Elwish Messages postés 40 Date d'inscription Statut Membre Dernière intervention -
Elwish Messages postés 40 Date d'inscription Statut Membre Dernière intervention -
Salut a tous je fais mes débuts dans le language C et je voulait créer un petit script mais voia qu'il ne fonctionne pas aidez moi SVP.
Script=
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
long nombreDeVies;
nombreDeVies = 9;
printf ("vous avez %ld vie")
system("PAUSE");
return 0;
}
Script=
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
long nombreDeVies;
nombreDeVies = 9;
printf ("vous avez %ld vie")
system("PAUSE");
return 0;
}
20 réponses
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
T'as raison, moi, j'y suis, c'est genial, plein de fonction améliorées etc...
Enfin, vive le site du zero !!!! :p
Enfin, vive le site du zero !!!! :p
salut tout le monde
voila je travaile sur les pointeurs en C et voila l'énoncé de l'exercice:
Ecrire un programme qui lit deux chaînes de caractères CH1 et CH2 au clavier et élimine toutes les lettres de CH1 qui apparaissent aussi dans CH2. Utiliser deux pointeurs P1 et P2, une variable logique TROUVE et la fonction strcpy.
Exemples:
Bonjour
Bravo
==>
njou
Bonjour
bravo
==>
Bnjou
abacab
aa
==>
bcab
et voila la solution:
#include <stdio.h>
#include <string.h>
main()
{
/* Déclarations */
char CH1[101], CH2[101]; /* chaînes données */
char *P1, *P2; /* pointeurs d'aide dans CH1 et CH2 */
int TROUVE; /* indicateur logique: vrai, si le caractère */
/* actuel dans CH1 a été trouvé dans CH2. */
/* Saisie des données */
printf("Entrez la première chaîne de caractères"
" (max.100 caractères) :\n");
gets(CH1);
printf("Entrez la deuxième chaîne de caractères"
" (max.100 caractères) :\n");
gets(CH2);
/* Eliminer les lettres communes */
/* Idée: Parcourir CH2 de gauche à droite et contrôler */
/* pour chaque caractère s'il se trouve aussi dans CH1. */
/* Si tel est le cas, éliminer le caractère de CH1 à */
/* l'aide de strcpy. */
for (P2=CH2; *P2; P2++)
{
TROUVE = 0;
for (P1=CH1 ; *P1 && !TROUVE ; P1++)
if (*P2==*P1)
{
TROUVE = 1;
strcpy(P1, P1+1);
}
}
/* Affichage du résultat */
printf("Chaîne résultat : \"%s\" \n", CH1);
return 0;
}
et j'arrive pas à comprendre le dernier bloc 'c'est à dire ça:
for (P2=CH2; *P2; P2++)
{
TROUVE = 0;
for (P1=CH1 ; *P1 && !TROUVE ; P1++)
if (*P2==*P1)
{
TROUVE = 1;
strcpy(P1, P1+1);
}
}
je doit savoir la signiffication de chaque ligne s'l vous plait par exemple dans la boucle for il ya *P1 && !TROUVE j'ai rien compri
s'il vous plait j'attent votre reponse
pliiiiiiiiiiz
voila je travaile sur les pointeurs en C et voila l'énoncé de l'exercice:
Ecrire un programme qui lit deux chaînes de caractères CH1 et CH2 au clavier et élimine toutes les lettres de CH1 qui apparaissent aussi dans CH2. Utiliser deux pointeurs P1 et P2, une variable logique TROUVE et la fonction strcpy.
Exemples:
Bonjour
Bravo
==>
njou
Bonjour
bravo
==>
Bnjou
abacab
aa
==>
bcab
et voila la solution:
#include <stdio.h>
#include <string.h>
main()
{
/* Déclarations */
char CH1[101], CH2[101]; /* chaînes données */
char *P1, *P2; /* pointeurs d'aide dans CH1 et CH2 */
int TROUVE; /* indicateur logique: vrai, si le caractère */
/* actuel dans CH1 a été trouvé dans CH2. */
/* Saisie des données */
printf("Entrez la première chaîne de caractères"
" (max.100 caractères) :\n");
gets(CH1);
printf("Entrez la deuxième chaîne de caractères"
" (max.100 caractères) :\n");
gets(CH2);
/* Eliminer les lettres communes */
/* Idée: Parcourir CH2 de gauche à droite et contrôler */
/* pour chaque caractère s'il se trouve aussi dans CH1. */
/* Si tel est le cas, éliminer le caractère de CH1 à */
/* l'aide de strcpy. */
for (P2=CH2; *P2; P2++)
{
TROUVE = 0;
for (P1=CH1 ; *P1 && !TROUVE ; P1++)
if (*P2==*P1)
{
TROUVE = 1;
strcpy(P1, P1+1);
}
}
/* Affichage du résultat */
printf("Chaîne résultat : \"%s\" \n", CH1);
return 0;
}
et j'arrive pas à comprendre le dernier bloc 'c'est à dire ça:
for (P2=CH2; *P2; P2++)
{
TROUVE = 0;
for (P1=CH1 ; *P1 && !TROUVE ; P1++)
if (*P2==*P1)
{
TROUVE = 1;
strcpy(P1, P1+1);
}
}
je doit savoir la signiffication de chaque ligne s'l vous plait par exemple dans la boucle for il ya *P1 && !TROUVE j'ai rien compri
s'il vous plait j'attent votre reponse
pliiiiiiiiiiz
Ce sera plus lisible si tu copies ça dans un éditeur colorisé et si tu arranges la présentation...
for (P2=CH2; *P2; P2++)
// P2=CH2 //P2 pointe sur le 1er caractère de CH2
// *P2 //la valeur (le caractère) pointée par P2 est différent de 0
// //personellement, j'aurais mis (*P2=='\0') c'est plus lisible
// //'\0' est le caractère de fin de chaine de caractère et sa valeur ASCII est égale à zéro
// P2++ //le pointeur P2 avance d'un caractère en fin de boucle
{
TROUVE=0; //c'est à dire pas TROUVE de caractères égaux
for (P1=CH1 ; *P1 && !TROUVE ; P1++)
// P1=CH1 //P1 pointe sur le 1er caractère de CH1
// *P1 && !TROUVE //caractère pointé par P1 non nul et pas de caractères égaux TROUVE
// P1++ //le pointeur P1 avance d'un caractère en fin de boucle
if (*P2==*P1) //si le char pointé par P2 égal le char pointé par P1
{
TROUVE=1; //2 char égaux TROUVE
strcpy(P1,P1+1); //recopier à la position P1 (de CH1), la sous chaine qui commence au char P1+1
} //en gros on décale d'un char le reste de la chaine
}
Le truc important est de se rappelé qu'une chaine de char se termine par '\0' et non à la fin du tableau.
C'est sur ce caractère que strcopy ou printf se base pour arrêter la lecture du tableau de char.
C'est aussi sur ce caractère que l'algo ici présent s'arrête.
Voilà, c'est un peu tard pour la réponse mais ça faisait longtemps que j'avais pas fait de C.
Je me suis fait plaisir
Jérôme
for (P2=CH2; *P2; P2++)
// P2=CH2 //P2 pointe sur le 1er caractère de CH2
// *P2 //la valeur (le caractère) pointée par P2 est différent de 0
// //personellement, j'aurais mis (*P2=='\0') c'est plus lisible
// //'\0' est le caractère de fin de chaine de caractère et sa valeur ASCII est égale à zéro
// P2++ //le pointeur P2 avance d'un caractère en fin de boucle
{
TROUVE=0; //c'est à dire pas TROUVE de caractères égaux
for (P1=CH1 ; *P1 && !TROUVE ; P1++)
// P1=CH1 //P1 pointe sur le 1er caractère de CH1
// *P1 && !TROUVE //caractère pointé par P1 non nul et pas de caractères égaux TROUVE
// P1++ //le pointeur P1 avance d'un caractère en fin de boucle
if (*P2==*P1) //si le char pointé par P2 égal le char pointé par P1
{
TROUVE=1; //2 char égaux TROUVE
strcpy(P1,P1+1); //recopier à la position P1 (de CH1), la sous chaine qui commence au char P1+1
} //en gros on décale d'un char le reste de la chaine
}
Le truc important est de se rappelé qu'une chaine de char se termine par '\0' et non à la fin du tableau.
C'est sur ce caractère que strcopy ou printf se base pour arrêter la lecture du tableau de char.
C'est aussi sur ce caractère que l'algo ici présent s'arrête.
Voilà, c'est un peu tard pour la réponse mais ça faisait longtemps que j'avais pas fait de C.
Je me suis fait plaisir
Jérôme
Petite précision, lesite du zéro est génial pour apprendre le minimum de la base.
Mais ne croyer pas qu'avec ça vous connaitrez une bonne partie du language !
Le langage C est bien fait, mais le C++ (Qt on le laisse à part) est trop maigre.
Ceci n'est pas contre le site du zéro (j'y suis) juste pour informer !
Mais ne croyer pas qu'avec ça vous connaitrez une bonne partie du language !
Le langage C est bien fait, mais le C++ (Qt on le laisse à part) est trop maigre.
Ceci n'est pas contre le site du zéro (j'y suis) juste pour informer !