Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Problème bizarre

38 réponses
Avatar
iTRiX
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 :

020104 * Claude Lesage * Portes CLAP * 203456 * 2 *
200.50
080404 *PAULE Thorin* Serres Bulbes* 056753 *12* 5.80
121003* alain provost * Cimenterie Forte * 208935*20*8.55

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>

// Variables globales
int tauxtx,lg;
ifstream f;
char ligne[100], date[10], nom[30], fournisseur[45], produit[60],
quantite[85], prixunit[100];

// Prototypes
void liretx();
void ouv();
void lirel();
void traiter();
void sepchamps(char a[]);
void fermer();

// Fonction principale
void main()
{
liretx();
ouv();
lirel();
traiter();
fermer();
}

// Lire le taux de taxe
void liretx()
{
cout << "Veuillez entrer le taux de taxation a appliquer\n"; cin >> tauxtx;
}

// Ouvrir le fichier
void ouv()
{
f.open("c:\\trans.txt",ios::in);
}

// Lire une ligne du fichier
void lirel()
{
f.getline(ligne,100);
}

// Traiter
void traiter()
{
lg=Ch_Longueur(ligne);
sepchamps(date);
sepchamps(nom);
sepchamps(fournisseur);
sepchamps(produit);
sepchamps(quantite);
sepchamps(prixunit);
cout << nom << "\n" << fournisseur << "\n" << produit << "\n" << quantite <<
"\n" << prixunit << "\n";
getch();
}

// Séparer les champs de la ligne
void sepchamps(char a[])
{
int k;
k=Ch_Rech(ligne,'*');
Ch_Copie_Nb(a,ligne,k-1);

strrev(ligne);
Ch_Copie_Nb(ligne,ligne,lg-k);
strrev(ligne);
}

// Fermer le fichier
void fermer()
{
f.close();
}


LISTING DE CHN.CPP
//Bibliothèques requises
#include <iostream.h>
#include <conio.h>
#include <string.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
}

10 réponses

1 2 3 4
Avatar
Jean-Marc Bourguet
Pierre Maurette <maurette.pierreATfree.fr@> writes:

Je pensais mon raccourci plus clair: je voulais simplement dire
qu'ils connaissaient, et même bien (souvent par la pratique
antérieure ou parallèle du C, mais peu importe) les notions de base
du C++ dont ils critiquent l'usage pédagogique, par exemple les
chaînes à 0 final.


Si nous ne maitrisions pas ces concepts dont nous jugeons
l'introduction non pas inutile, comme tu as l'air de le penser, mais
trop rapide dans les cours de C++ trop base sur le C, tu nous en
ferais le reproche a juste titre.

A+

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org

Avatar
Pierre Maurette
Jean-Marc Bourguet typa:

Pierre Maurette <maurette.pierreATfree.fr@> writes:

Je pensais mon raccourci plus clair: je voulais simplement dire
qu'ils connaissaient, et même bien (souvent par la pratique
antérieure ou parallèle du C, mais peu importe) les notions de base
du C++ dont ils critiquent l'usage pédagogique, par exemple les
chaînes à 0 final.


Si nous ne maitrisions pas ces concepts dont nous jugeons
l'introduction non pas inutile, comme tu as l'air de le penser, mais
trop rapide dans les cours de C++ trop base sur le C, tu nous en
ferais le reproche a juste titre.
Je ne fais de reproche à personne sur une vision de l'enseignement du

C++, je suis tout à fait sincère quand j'écris que je n'en ai pas les
compétences et qu'à chaque fois que je change d'avis, je fais un pas
en avant.

Je suis tout à fait convaincu par la réponse de Michel Michaud, qui
présente un point de vue que j'avais déjà lu ici. En fait, j'avais
constaté moi-même le danger d'enchaîner, comme c'est trop souvent le
cas, la présentation des pointeurs et celle des références. Et je ne
parle que d'enchaîner, alors quand c'est mélangé :-(
Certains cours de C++ devraient s'intituler "Cours de C et notions de
C++ si nous avons du temps". Je pense à l'enseignement professionnel
et technique, ou à des organismes comme l'AFPA que je connais un peu.
Je pense que c'est admissible dans la mesure où le module informatique
est marginal. Bien entendu, nous sortons alors du cadre du C++.

Le point sur lequel je faisais reproche est l'attitude d'une partie du
groupe par rapport aux professeurs en général et peut-être un manque
de solidarité des enseignants.
Ce reproche concerne la forme au moins autant que le fond. Je trouve
que c'est à la fois non constructif et inesthétique, ça me fait un peu
penser à ces moments où tout le monde critique la même tête de turc,
mais où chacun sent au fond de lui-même que ce n'est pas très bien.
Nous avons le cas d'iTRiX, qui a l'élégance de ne pas "hurler avec les
loups", mais à qui ça ne doit pas faire plaisir, et que ça laisse dans
son caca. Il est certain que poster du code de son professeur,
peut-être pas tout à fait parfait (le code, pas le prof), n'était pas
une bonne idée.
Il y a quelques temps, nous avions eu le cas d'un "petit con
prétentieux" qui ne voulait pas utiliser les outils choisis par le
professeur. J'intuite que le navrant était "Linux" et "à mort Billou"
comme on est OM ou PSG*. Toujours est-il qu'une grande partie des
réponses allaient dans son sens, et de plus étaient insultantes pour
un enseignant dont on ne savait rien, surtout pas sa façon de voir le
programme.
Voilà, c'était mon opinion, et je la partage...
Hasta luego,
Pierre

* Je suis ASBH, Béziers (rugby) ;-)


Avatar
kanze
Fabien LE LEZ wrote in message
news:...
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.


En exigeant qu'ils utilisent des fonctions bizarres qu'il leur a fait
écrire, plutôt que les fonctions de la bibliothèque standard C ? Qu'un
prof fasse du bon C en l'appelant du C++, c'est de la publicité
mensongère, mais le contenu du cours peut quand même être valide, voire
valable. Mais qu'un prof fasse du très mauvais C, qu'importe ce qu'il
l'appelle.

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 ?


S'il n'y avait eu que ça comme problème:-). (Mais c'était un problème on
ne peut plus fréquent. On reconnaissait toujours les débuttants en C
parce qu'il faisait strcpy( malloc( strlen( s ) ), s ).)

--
James Kanze GABI Software mailto:
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34



Avatar
kanze
Pierre Maurette <maurette.pierreATfree.fr@> wrote in message
news:...
"iTRiX" typa:

"Alexandre" a écrit dans le message de
[...]

Il ne devrait pas appeler son cours : "C++" mais "C".
Oui, probablement mais ce n'est pas lui qui décide du programme

d'informatique, il doit enseigner du C++, ou du moins, faire comme
si.


Bravo pour votre solidarité, courageuse du fait que vous deviez vous
sentir seul.
Evitez au maximum les allusions à un professeur sur ce groupe, et
surtoput, ne donnez jamais de grain à moudre aux grincheux en postant
du code de ce prof.
Je me suis déjà exprimé au sujet des critiques trollesques
systématiques envers les enseignants par des gens qui ont certainement
subi un traumatisme de la part d'un professeur. Je me contenterai de
remarquer que ceux-là même qui ne veulent aucun C-isme dans un cours
C++ sont également des programmeurs C, ou en tous cas connaissent le
C.


Il y a prof et prof. Aussi, en ce qui me concerne, s'il ne s'agissait
que de C'ismes... Mais des variables globales, et des fonctions sans
paramètres... Si c'est le prof qui a voulu ça (et non l'élève qui a mal
compris, parce que ça aussi, on le voit un peu trop souvent), il y a
réelement un problème.

--
James Kanze GABI Software mailto:
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34



Avatar
Alain Naigeon
"Michel Michaud" a écrit dans le message news:
ckJec.4646$
Dans news:, Pierre
A partir de cette constatation, je me demande s'ils ne sont pas dans
l'erreur en affirmant (de bonne foi) que de solides bases sur des
notions comme les pointeurs ne sont pas nécessaires à
l'apprentissage du C++. Puisqu'ils ne peuvent se rendre compte sur
eux-mêmes des effets de cette ignorance.


Ceux qui l'enseignent ainsi ne sont pas dans l'ignorance. Il est
clair que les pointeurs (et bien d'autres choses) sont présents
et nécessaires dans C++. Mais on peut faire un grand bout de
chemin en C++ sans en avoir besoin, alors que leur usage s'impose
plus rapidement en C. Ainsi, dans mon plus récent livre, on doit
« attendre » 300 pages avant de parler de pointeurs et, en réalité,
on pourrait attendre encore un peu plus. Je n'ai jamais eu de
plainte des élèves d'avoir « attendu » si longtemps :-)


La limite de ce point de vue : à force d'être vues plus tard, donc
moins longtemps, les choses difficiles le sont encore plus - on
devrait commencer par les pointeurs (et 7 bémols à la clé) :-)

--

Français *==> "Musique renaissance" <==* English
midi - facsimiles - ligatures - mensuration
http://anaigeon.free.fr | http://www.medieval.org/emfaq/anaigeon/
Alain Naigeon - - Strasbourg, France


Avatar
Fabien LE LEZ
On Tue, 13 Apr 2004 21:03:27 +0200, "Alain Naigeon"
wrote:

La limite de ce point de vue : à force d'être vues plus tard, donc
moins longtemps, les choses difficiles le sont encore plus


D'un autre côté, avoir déjà une certaine maturité avant d'aborder les
côtés ardus du C++, ne peut qu'aider à les comprendre plus facilement.

--
;-)
FLL, Epagneul Breton

Avatar
Fabien LE LEZ
On Tue, 13 Apr 2004 21:03:27 +0200, "Alain Naigeon"
wrote:

La limite de ce point de vue : à force d'être vues plus tard, donc
moins longtemps, les choses difficiles le sont encore plus - on
devrait commencer par les pointeurs (et 7 bémols à la clé) :-)


Non, avec ton raisonnement, on devrait commencer par les détails
tordus des templates. Genre étude de certaines classes de boost. Avant
d'aborder le principe des templates, bien entendu.

--
;-)
FLL, Epagneul Breton

Avatar
Fabien LE LEZ
On Tue, 13 Apr 2004 11:06:21 +0200, Pierre Maurette
<maurette.pierreATfree.fr@> wrote:

Le point sur lequel je faisais reproche est l'attitude d'une partie du
groupe par rapport aux professeurs en général et peut-être un manque
de solidarité des enseignants.


Je suis toujours dubitatif quant à la solidarité avec ceux qui donnent
une mauvaise image d'un métier (ici, enseignant en C++).

--
;-)
FLL, Epagneul Breton

Avatar
Alain Naigeon
"Fabien LE LEZ" a écrit dans le message news:

On Tue, 13 Apr 2004 21:03:27 +0200, "Alain Naigeon"
wrote:

La limite de ce point de vue : à force d'être vues plus tard, donc
moins longtemps, les choses difficiles le sont encore plus - on
devrait commencer par les pointeurs (et 7 bémols à la clé) :-)


Non, avec ton raisonnement, on devrait commencer par les détails
tordus des templates. Genre étude de certaines classes de boost. Avant
d'aborder le principe des templates, bien entendu.


T'ss, j'espère que tu as compris que mon propos était à 50 ou 25 %
provocateur - je maintiens qu'il contient un peu de vrai - * mais *
il n'y avait pas d'impossibilité logique dans le cas des pointeurs,
comme dans l'exemple absurde que tu feins de déduire de mon
propos. Mettons que ta réplique soit à 50 ou 25 % une boutade ;-)

(certains profs oublient que l'apprentissage n'est pas seulement
une question d'exposition logique et d'acquisition intellectuelle,
il y a aussi un processus de maturation ; comment expliquer,
sinon, qu'on puisse avancer plus en 3 cours de 2 heures espacés
d'une semaine, qu'en un cours de 6 h ? Tout prof a constaté ça,
je suppose - j'espère ! Donc un truc vu moins longtemps est moins
acquis... CQFD A condition que les préconditions soient là pour
aborder le sujet, bien sûr, ça je suis bien obligé de te l'accorder :-) )

--

Français *==> "Musique renaissance" <==* English
midi - facsimiles - ligatures - mensuration
http://anaigeon.free.fr | http://www.medieval.org/emfaq/anaigeon/
Alain Naigeon - - Strasbourg, France


Avatar
Alain Naigeon
"Fabien LE LEZ" a écrit dans le message news:

On Tue, 13 Apr 2004 11:06:21 +0200, Pierre Maurette
<maurette.pierreATfree.fr@> wrote:

Le point sur lequel je faisais reproche est l'attitude d'une partie du
groupe par rapport aux professeurs en général et peut-être un manque
de solidarité des enseignants.


Je suis toujours dubitatif quant à la solidarité avec ceux qui donnent
une mauvaise image d'un métier (ici, enseignant en C++).



Absolument, et cela s'appelle du corporatisme.

--

Français *==> "Musique renaissance" <==* English
midi - facsimiles - ligatures - mensuration
http://anaigeon.free.fr | http://www.medieval.org/emfaq/anaigeon/
Alain Naigeon - - Strasbourg, France


1 2 3 4