Bonjour
Je suis étudiant en informatique et j'ai un petit programme à faire en C++.
J'ai un problème assez étrange dont je suis incapable de trouver la
solution.
Le problème se situe au niveau de la fonction sepchamps. Son rôle est de
séparer les champs selon les * du fichier trans.txt. Voici son contenu :
Il semblerait que, par exemple, lorsque j'appelle cette fonction avec date,
il écrit également dans nom. Lorsque je la lance avec nom, elle écrit
également dans date. C'est peut-être juste une petite erreur mais je ne la
vois pas.
L'exercice consistera plus tard à faire une mise en forme correcte pour
l'affichage mais je ne suis pas rendu là. Le fichier chn.cpp dont on doit se
servir contient des fonctions semblables à celle de string.h. J'ai inclus
son listing à la fin mais je doute que l'erreur provienne de là.
J'espère avoir été assez clair dans mon problème et merci beaucoup à tous
ceux qui prendront de leur temps pour m'aider!! :-)
Note: On utilise le compilateur Borland C++ 5.0
Voici donc le code de mon programme jusqu'à maintenant:
#include <string.h>
#include "chn.cpp"
#include <iostream.h>
#include <fstream.h>
#include <conio.h>
// Protocoles
void Ch_Init_Nb(char X[], char C, int Nb);
int Ch_Lire_Max(char X[], int Max);
int Ch_Longueur(char X[]);
void Ch_Copie(char CR[], char CE[]);
void Ch_Copie_Nb(char CR[], char CE[], int Nb);
void Ch_Concat(char CR[], char CE[]);
void Ch_Concat_Nb(char CR[], char CE[], int Nb);
int Ch_Rech(char X[], char C);
// Fonction pour initialiser selon un caractère particulier
void Ch_Init_Nb(char X[], char C, int Nb)
{
for(int i=0; i<Nb; i++)
X[i] = C;
X[Nb] = '\0';
}
// Fonction pour lire une chaîne selon un max de caractère
int Ch_Lire_Max(char X[], int Max)
{
int i=0;
char tmp;
tmp=getche();
while(i<(Max-1) && tmp!=13)
{
X[i]=tmp;
tmp=getche();
i=i+1;
}
return i;
}
// Fonction pour obtenir la longueur d'une chaîne
int Ch_Longueur(char X[])
{
int i=0;
while(X[i]!='\0')
{
i=i+1;
}
return i;
}
// Fonction pour copier une chaîne d'une variable à une autre
void Ch_Copie(char CR[], char CE[])
{
int i=0;
while(CE[i]!='\0')
{
CR[i]=CE[i];
i++;
}
CR[i]='\0';
}
// Fonction pour copier une partie d'une chaîne dans une autre
void Ch_Copie_Nb(char CR[], char CE[], int Nb)
{
int i=0;
while(CE[i]!='\0' && i<Nb)
{
CR[i]=CE[i];
i++;
}
CR[i]='\0';
}
// Fonction de concaténation
void Ch_Concat(char CR[], char CE[])
{
int k;
k=Ch_Longueur(CR);
Ch_Copie(CR+k,CE);
}
// Fonction de concaténation limitée
void Ch_Concat_Nb(char CR[], char CE[], int Nb)
{
int k;
k=Ch_Longueur(CR);
Ch_Copie_Nb(CR+k,CE,Nb);
}
// Fonction de recherche de caractère
int Ch_Rech(char X[], char C)
{
int Pos=-1;
for(int i=0;i<50;i++)
{
if(X[i]==C)
{
Pos=i;
i=50;
}
}
return (Pos+1); //Valeur réelle
}
Bon, j'imagine que votre prof de C++ vous impose d'utiliser des chaînes "à la C", i.e. en char[], au lieu d'utiliser des chaînes C++, std::string. Jusque-là, logique, on va tout de même pas demander à un prof de C++ d'enseigner le C++.
Mais vous interdit-il aussi de faire appel à la bibliothèque standard du C ? Je pense en particulier à strtok(), strchr(), strncpy(), strlen(), etc., qui t'auraient économisé bien des lignes de code.
Pour la réponse à ton problème : imagine que je veuille copier la chaîne "0123456789" dans date[] ; que se passe-t-il ?
-- ;-) FLL, Epagneul Breton
On Thu, 8 Apr 2004 22:05:36 -0400, "iTRiX" <nospam@inmybox.com> wrote:
Je suis étudiant en informatique et j'ai un petit programme à faire en C++.
Bon, j'imagine que votre prof de C++ vous impose d'utiliser des
chaînes "à la C", i.e. en char[], au lieu d'utiliser des chaînes C++,
std::string. Jusque-là, logique, on va tout de même pas demander à un
prof de C++ d'enseigner le C++.
Mais vous interdit-il aussi de faire appel à la bibliothèque standard
du C ? Je pense en particulier à strtok(), strchr(), strncpy(),
strlen(), etc., qui t'auraient économisé bien des lignes de code.
Pour la réponse à ton problème : imagine que je veuille copier la
chaîne "0123456789" dans date[] ; que se passe-t-il ?
Bon, j'imagine que votre prof de C++ vous impose d'utiliser des chaînes "à la C", i.e. en char[], au lieu d'utiliser des chaînes C++, std::string. Jusque-là, logique, on va tout de même pas demander à un prof de C++ d'enseigner le C++.
Mais vous interdit-il aussi de faire appel à la bibliothèque standard du C ? Je pense en particulier à strtok(), strchr(), strncpy(), strlen(), etc., qui t'auraient économisé bien des lignes de code.
Pour la réponse à ton problème : imagine que je veuille copier la chaîne "0123456789" dans date[] ; que se passe-t-il ?
-- ;-) FLL, Epagneul Breton
Alexandre
d'abord un premier conseil : oublies tes variables globales... A moins qu'elles ne soient imposées par ton prof (ça serait très étrange, mais bon on voit de tout), c'est une *trsè* mauvaise solution.
Je pense que vous n'avez pas encore vu les classes, ni même les structures apparement... Sinon il FAUT vous en servir, ici. Les chaînes "à la C" sont à mon avis indiquées pour des histoires de taille de champ, non ? Sinon je ne vois pas l'avantage par rapport à std::string (que vous n'avez peut-être pas vu encore)
Ici aussi, les prototypes sont imposés par le prof ? Parce que je comprends les variables globales : aucun paramètre aux fonctions, aucune valeur de retour !!! Bref, de la programmation à deux balles.
Dites, ça fait combien d'heures que le prof a commencé le C++ ? Parce que je trouve que la POO est très absente de votre exercice (au demeurant fort simple mais très "C" dans l'esprit) ça ne m'étonnerait pas si votre prof enseignait le C il y a quelques années... Il a remplacé printf par cout pour faire du C++, apparament !
d'abord un premier conseil : oublies tes variables globales...
A moins qu'elles ne soient imposées par ton prof (ça serait très étrange,
mais bon on voit de tout), c'est une *trsè* mauvaise solution.
Je pense que vous n'avez pas encore vu les classes, ni même les structures
apparement... Sinon il FAUT vous en servir, ici.
Les chaînes "à la C" sont à mon avis indiquées pour des histoires de taille
de champ, non ? Sinon je ne vois pas l'avantage par rapport à std::string
(que vous n'avez peut-être pas vu encore)
Ici aussi, les prototypes sont imposés par le prof ? Parce que je comprends
les variables globales : aucun paramètre aux fonctions, aucune valeur de
retour !!!
Bref, de la programmation à deux balles.
Dites, ça fait combien d'heures que le prof a commencé le C++ ? Parce que je
trouve que la POO est très absente de votre exercice (au demeurant fort
simple mais très "C" dans l'esprit)
ça ne m'étonnerait pas si votre prof enseignait le C il y a quelques
années... Il a remplacé printf par cout pour faire du C++, apparament !
d'abord un premier conseil : oublies tes variables globales... A moins qu'elles ne soient imposées par ton prof (ça serait très étrange, mais bon on voit de tout), c'est une *trsè* mauvaise solution.
Je pense que vous n'avez pas encore vu les classes, ni même les structures apparement... Sinon il FAUT vous en servir, ici. Les chaînes "à la C" sont à mon avis indiquées pour des histoires de taille de champ, non ? Sinon je ne vois pas l'avantage par rapport à std::string (que vous n'avez peut-être pas vu encore)
Ici aussi, les prototypes sont imposés par le prof ? Parce que je comprends les variables globales : aucun paramètre aux fonctions, aucune valeur de retour !!! Bref, de la programmation à deux balles.
Dites, ça fait combien d'heures que le prof a commencé le C++ ? Parce que je trouve que la POO est très absente de votre exercice (au demeurant fort simple mais très "C" dans l'esprit) ça ne m'étonnerait pas si votre prof enseignait le C il y a quelques années... Il a remplacé printf par cout pour faire du C++, apparament !
Fabien LE LEZ
On Thu, 8 Apr 2004 22:05:36 -0400, "iTRiX" wrote:
Le fichier chn.cpp dont on doit se servir contient des fonctions semblables à celle de string.h.
Gloups... J'avais pas vu ça. Mon dieu mon dieu...
-- ;-) FLL, Epagneul Breton
On Thu, 8 Apr 2004 22:05:36 -0400, "iTRiX" <nospam@inmybox.com> wrote:
Le fichier chn.cpp dont on doit se
servir contient des fonctions semblables à celle de string.h.
Le fichier chn.cpp dont on doit se servir contient des fonctions semblables à celle de string.h.
Gloups... J'avais pas vu ça. Mon dieu mon dieu...
-- ;-) FLL, Epagneul Breton
Fabien LE LEZ
On Fri, 9 Apr 2004 08:11:51 +0200, "Alexandre" wrote:
ça ne m'étonnerait pas si votre prof enseignait le C il y a quelques années... Il a remplacé printf par cout pour faire du C++, apparament !
J'ai la même impression. Et ce qui me désole, c'est le nombre d'élèves qu'on voit passer ici dans le même cas.
C'est là que je vois à quel point j'ai eu raison de faire des études de maths : comme la plupart des théories qu'on étudiait datent de plus d'un demi-siècle, les profs n'avaient pas le problème de mise à niveau ;-)
-- ;-) FLL, Epagneul Breton
On Fri, 9 Apr 2004 08:11:51 +0200, "Alexandre"
<alex.g@netcourrier.com> wrote:
ça ne m'étonnerait pas si votre prof enseignait le C il y a quelques
années... Il a remplacé printf par cout pour faire du C++, apparament !
J'ai la même impression. Et ce qui me désole, c'est le nombre d'élèves
qu'on voit passer ici dans le même cas.
C'est là que je vois à quel point j'ai eu raison de faire des études
de maths : comme la plupart des théories qu'on étudiait datent de plus
d'un demi-siècle, les profs n'avaient pas le problème de mise à niveau
;-)
On Fri, 9 Apr 2004 08:11:51 +0200, "Alexandre" wrote:
ça ne m'étonnerait pas si votre prof enseignait le C il y a quelques années... Il a remplacé printf par cout pour faire du C++, apparament !
J'ai la même impression. Et ce qui me désole, c'est le nombre d'élèves qu'on voit passer ici dans le même cas.
C'est là que je vois à quel point j'ai eu raison de faire des études de maths : comme la plupart des théories qu'on étudiait datent de plus d'un demi-siècle, les profs n'avaient pas le problème de mise à niveau ;-)
-- ;-) FLL, Epagneul Breton
Twxs
Fabien LE LEZ wrote:
On Thu, 8 Apr 2004 22:05:36 -0400, "iTRiX" wrote:
Le fichier chn.cpp dont on doit se servir contient des fonctions semblables à celle de string.h.
Gloups... J'avais pas vu ça. Mon dieu mon dieu...
comme tu dis... brrr
void Ch_Init_Nb(char X[], char C, int Nb); int Ch_Lire_Max(char X[], int Max); int Ch_Longueur(char X[]); void Ch_Copie(char CR[], char CE[]); void Ch_Copie_Nb(char CR[], char CE[], int Nb); void Ch_Concat(char CR[], char CE[]); void Ch_Concat_Nb(char CR[], char CE[], int Nb); int Ch_Rech(char X[], char C);
peut etre qu'en borland y'a un #define _ :: ;-)
Twxs
Fabien LE LEZ wrote:
On Thu, 8 Apr 2004 22:05:36 -0400, "iTRiX" <nospam@inmybox.com> wrote:
Le fichier chn.cpp dont on doit se
servir contient des fonctions semblables à celle de string.h.
Gloups... J'avais pas vu ça. Mon dieu mon dieu...
comme tu dis... brrr
void Ch_Init_Nb(char X[], char C, int Nb);
int Ch_Lire_Max(char X[], int Max);
int Ch_Longueur(char X[]);
void Ch_Copie(char CR[], char CE[]);
void Ch_Copie_Nb(char CR[], char CE[], int Nb);
void Ch_Concat(char CR[], char CE[]);
void Ch_Concat_Nb(char CR[], char CE[], int Nb);
int Ch_Rech(char X[], char C);
Bon, j'imagine que votre prof de C++ vous impose d'utiliser des chaînes "à la C", i.e. en char[], au lieu d'utiliser des chaînes C++, std::string. Jusque-là, logique, on va tout de même pas demander à un prof de C++ d'enseigner le C++.
C'est un prof bizarre...
Mais vous interdit-il aussi de faire appel à la bibliothèque standard du C ? Je pense en particulier à strtok(), strchr(), strncpy(), strlen(), etc., qui t'auraient économisé bien des lignes de code.
Oui il veut qu'on utilise les fonctions de traitement des chaînes de caractères qu'il nous a fait faire (chn.cpp) :-(
Pour la réponse à ton problème : imagine que je veuille copier la chaîne "0123456789" dans date[] ; que se passe-t-il ?
Elle va être effectivement copiée dans date??
-- ;-) FLL, Epagneul Breton
"Fabien LE LEZ" <gramster@gramster.com> a écrit dans le message de
news:k83c709jl0rla342g19cho2nbqejkc2epk@4ax.com...
On Thu, 8 Apr 2004 22:05:36 -0400, "iTRiX" <nospam@inmybox.com> wrote:
Je suis étudiant en informatique et j'ai un petit programme à faire en
C++.
Bon, j'imagine que votre prof de C++ vous impose d'utiliser des
chaînes "à la C", i.e. en char[], au lieu d'utiliser des chaînes C++,
std::string. Jusque-là, logique, on va tout de même pas demander à un
prof de C++ d'enseigner le C++.
C'est un prof bizarre...
Mais vous interdit-il aussi de faire appel à la bibliothèque standard
du C ? Je pense en particulier à strtok(), strchr(), strncpy(),
strlen(), etc., qui t'auraient économisé bien des lignes de code.
Oui il veut qu'on utilise les fonctions de traitement des chaînes de
caractères qu'il nous a fait faire (chn.cpp) :-(
Pour la réponse à ton problème : imagine que je veuille copier la
chaîne "0123456789" dans date[] ; que se passe-t-il ?
Bon, j'imagine que votre prof de C++ vous impose d'utiliser des chaînes "à la C", i.e. en char[], au lieu d'utiliser des chaînes C++, std::string. Jusque-là, logique, on va tout de même pas demander à un prof de C++ d'enseigner le C++.
C'est un prof bizarre...
Mais vous interdit-il aussi de faire appel à la bibliothèque standard du C ? Je pense en particulier à strtok(), strchr(), strncpy(), strlen(), etc., qui t'auraient économisé bien des lignes de code.
Oui il veut qu'on utilise les fonctions de traitement des chaînes de caractères qu'il nous a fait faire (chn.cpp) :-(
Pour la réponse à ton problème : imagine que je veuille copier la chaîne "0123456789" dans date[] ; que se passe-t-il ?
Elle va être effectivement copiée dans date??
-- ;-) FLL, Epagneul Breton
iTRiX
"Alexandre" a écrit dans le message de news:40763ea3$0$496$
d'abord un premier conseil : oublies tes variables globales... A moins qu'elles ne soient imposées par ton prof (ça serait très étrange, mais bon on voit de tout), c'est une *trsè* mauvaise solution.
Je pense que vous n'avez pas encore vu les classes, ni même les structures apparement... Sinon il FAUT vous en servir, ici. Les chaînes "à la C" sont à mon avis indiquées pour des histoires de taille
de champ, non ? Sinon je ne vois pas l'avantage par rapport à std::string (que vous n'avez peut-être pas vu encore)
Oui, on a vu les classes et les structures mais il faut utilisez ces variables car c'est plus "simple" selon lui...
Ici aussi, les prototypes sont imposés par le prof ? Parce que je comprends
les variables globales : aucun paramètre aux fonctions, aucune valeur de retour !!! Bref, de la programmation à deux balles.
Non, c'est pas imposé mais de la manière qu'il veut ça, c'est des fonctions void.
Dites, ça fait combien d'heures que le prof a commencé le C++ ? Parce que je
trouve que la POO est très absente de votre exercice (au demeurant fort simple mais très "C" dans l'esprit) ça ne m'étonnerait pas si votre prof enseignait le C il y a quelques années... Il a remplacé printf par cout pour faire du C++, apparament !
On a commencé à voir la POO mais le prof "veut" qu'on utilise cette méthode pour ce travail. C'est un très vieux prof. Il enseignait à mon père quand il était au cégep lui même...
"Alexandre" <alex.g@netcourrier.com> a écrit dans le message de
news:40763ea3$0$496$636a15ce@news.free.fr...
d'abord un premier conseil : oublies tes variables globales...
A moins qu'elles ne soient imposées par ton prof (ça serait très étrange,
mais bon on voit de tout), c'est une *trsè* mauvaise solution.
Je pense que vous n'avez pas encore vu les classes, ni même les structures
apparement... Sinon il FAUT vous en servir, ici.
Les chaînes "à la C" sont à mon avis indiquées pour des histoires de
taille
de champ, non ? Sinon je ne vois pas l'avantage par rapport à std::string
(que vous n'avez peut-être pas vu encore)
Oui, on a vu les classes et les structures mais il faut utilisez ces
variables car c'est plus "simple" selon lui...
Ici aussi, les prototypes sont imposés par le prof ? Parce que je
comprends
les variables globales : aucun paramètre aux fonctions, aucune valeur de
retour !!!
Bref, de la programmation à deux balles.
Non, c'est pas imposé mais de la manière qu'il veut ça, c'est des fonctions
void.
Dites, ça fait combien d'heures que le prof a commencé le C++ ? Parce que
je
trouve que la POO est très absente de votre exercice (au demeurant fort
simple mais très "C" dans l'esprit)
ça ne m'étonnerait pas si votre prof enseignait le C il y a quelques
années... Il a remplacé printf par cout pour faire du C++, apparament !
On a commencé à voir la POO mais le prof "veut" qu'on utilise cette méthode
pour ce travail. C'est un très vieux prof. Il enseignait à mon père quand il
était au cégep lui même...
"Alexandre" a écrit dans le message de news:40763ea3$0$496$
d'abord un premier conseil : oublies tes variables globales... A moins qu'elles ne soient imposées par ton prof (ça serait très étrange, mais bon on voit de tout), c'est une *trsè* mauvaise solution.
Je pense que vous n'avez pas encore vu les classes, ni même les structures apparement... Sinon il FAUT vous en servir, ici. Les chaînes "à la C" sont à mon avis indiquées pour des histoires de taille
de champ, non ? Sinon je ne vois pas l'avantage par rapport à std::string (que vous n'avez peut-être pas vu encore)
Oui, on a vu les classes et les structures mais il faut utilisez ces variables car c'est plus "simple" selon lui...
Ici aussi, les prototypes sont imposés par le prof ? Parce que je comprends
les variables globales : aucun paramètre aux fonctions, aucune valeur de retour !!! Bref, de la programmation à deux balles.
Non, c'est pas imposé mais de la manière qu'il veut ça, c'est des fonctions void.
Dites, ça fait combien d'heures que le prof a commencé le C++ ? Parce que je
trouve que la POO est très absente de votre exercice (au demeurant fort simple mais très "C" dans l'esprit) ça ne m'étonnerait pas si votre prof enseignait le C il y a quelques années... Il a remplacé printf par cout pour faire du C++, apparament !
On a commencé à voir la POO mais le prof "veut" qu'on utilise cette méthode pour ce travail. C'est un très vieux prof. Il enseignait à mon père quand il était au cégep lui même...
Fabien LE LEZ
On Fri, 9 Apr 2004 11:23:44 -0400, "iTRiX" wrote:
C'est un prof bizarre...
Non, un prof assez classique, qui enseigne le C en appelant ça "C++" parce que ça fait plus moderne.
Pour la réponse à ton problème : imagine que je veuille copier la chaîne "0123456789" dans date[] ; que se passe-t-il ?
Elle va être effectivement copiée dans date??
A ton avis, comment fait-on rentrer les 11 octets de "0123456789" dans un tableau de 10 octets ?
-- ;-) FLL, Epagneul Breton
On Fri, 9 Apr 2004 11:23:44 -0400, "iTRiX" <nospam@inmybox.com> wrote:
C'est un prof bizarre...
Non, un prof assez classique, qui enseigne le C en appelant ça "C++"
parce que ça fait plus moderne.
Pour la réponse à ton problème : imagine que je veuille copier la
chaîne "0123456789" dans date[] ; que se passe-t-il ?
Elle va être effectivement copiée dans date??
A ton avis, comment fait-on rentrer les 11 octets de "0123456789" dans
un tableau de 10 octets ?