Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1498 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Incrementation dans un test ?

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

Incrementation dans un test ?

n°905142
Slide
Posté le 23-11-2004 à 00:24:37  profilanswer
 

Salut, je voudrais savoir si ce genre de bidouille ne pose pas de probleme :
 
 do
  ...;
 while ( (machine<>bidule) && (truc>++bidule) );
 
En pratique, je viens de tester sur DEV-C++, ça marche.
 
Mais, comme c'est un devoir que je dois rendre à un prof d'informatique, il faut que je sache si en theorie il est autorisé de faire une incremention sur une variable dans un test utilisant 2 fois cette meme variable.
 
Merci bcp :)


Message édité par Slide le 23-11-2004 à 01:47:14
mood
Publicité
Posté le 23-11-2004 à 00:24:37  profilanswer
 

n°905244
Taz
bisounours-codeur
Posté le 23-11-2004 à 07:55:54  profilanswer
 

ça fonctionne, mais ça n'est pas lisible. Surtout que bidule est incrémenter conditionnellement. Mieux vaut t'en passer

n°905319
masklinn
í dag viðrar vel til loftárása
Posté le 23-11-2004 à 11:06:48  profilanswer
 

ouaip, faut bien penser que l'opérateur && ne va passer à la 2e opérande que si la 1ère est vraie (si elle est fausse le && sera faux donc on s'en fout de la 2e), donc il n'incrémentera bidule que si machine <> bidule
 
ca sent la boucle infinie quand même [:figti]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°905598
Slide
Posté le 23-11-2004 à 14:45:42  profilanswer
 

Masklinn a écrit :

l'opérateur && ne va passer à la 2e opérande que si la 1ère est vraie (si elle est fausse le && sera faux donc on s'en fout de la 2e), donc il n'incrémentera bidule que si machine <> bidule


 

Taz a écrit :

ça fonctionne, mais ça n'est pas lisible. Surtout que bidule est incrémenter conditionnellement. Mieux vaut t'en passer


 
C'est exactement ce que je veux en faite. :D (enfin je crois lol!)
Donc les operations vont se faire de gauche vers la droite en theorie ?
 
Sinon le code d'origine c'est ça (simplifié) :
 

Code :
  1. const char longueur=100; // Longueur maximale de la chaine a saisir.
  2. char* saisies;
  3. char compteur_saisie;
  4. saisies = (char*)malloc(2*longueur*sizeof(char));
  5. do
  6.   scanf("%c", (saisies+compteur_saisie*sizeof(char)) );
  7. while ( (*(saisies+compteur_saisie*sizeof(char))!=10 ) && (longueur>++compteur_saisie) );


 
Mc :)


Message édité par Slide le 23-11-2004 à 14:47:29
n°905621
Lam's
Profil: bas.
Posté le 23-11-2004 à 14:56:36  profilanswer
 

Tu sais quoi ? On va t'aider à avoir une bonne note. Pour cela, il va te falloir complètement revoir certains trucs, pour arriver à du code lisible, facile à maintenir, et correct.  
On y va:
1. Très mauvais idée de stocker ta longueur dans un char. Sur la plupart des plate-formes, ça ne te donne une taille maximum qui n'est que de 127. Utilises plutôt size_t qui est un alias vers le bon type pour représenter des tailles mémoires.
 
4. Ton malloc, ça ne sert à rien de prendre 2* la longueur. Il ne te faut que longeur+1. D'autre part, sizeof (char) est forcément égal à 1.
 
7. Utilise un bête saisies+compteur ou (plus lisible) &saisies[compteur]
 
8. C'est ignoble. On te demandes de recoder fgets ou quoi ?
 

n°905642
Slide
Posté le 23-11-2004 à 15:08:15  profilanswer
 

Pour le 2*, en faite ca je l'avais fait pour tester un truc, j'ai oublié de le virer (oups :D).
 
fgets, j'avais pensé l'utiliser, mais systematiquement il me rajoute un caractere d'office.
 
Par là je veux dire que :
 

Code :
  1. fgets(saisies,1,stdin);


 
ça ne me demande meme pas de caractere, mais il en stock un tout seul.
 
Donc je vai etre obliger de faire  
 

Code :
  1. fgets(saisies,longueur+1,stdin);


 
Sauf que là, il y a un caractere en trop :(
 
Le prof va delirer si je fais ca, en faite on n'a pas encore vu ça en cours lol.

n°905651
masklinn
í dag viðrar vel til loftárása
Posté le 23-11-2004 à 15:11:45  profilanswer
 

Slide a écrit :

Pour le 2*, en faite ca je l'avais fait pour tester un truc, j'ai oublié de le virer (oups :D).
 
fgets, j'avais pensé l'utiliser, mais systematiquement il me rajoute un caractere d'office.


Le retour à la ligne?
edit: ah oui le \0 de terminaison, merci lam's


Message édité par masklinn le 23-11-2004 à 15:21:49

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°905654
Lam's
Profil: bas.
Posté le 23-11-2004 à 15:13:20  profilanswer
 

Slide a écrit :


fgets, j'avais pensé l'utiliser, mais systematiquement il me rajoute un caractere d'office.


Tu as du mal l'utiliser alors. Elle ne rajoute rien, et elle te garantis de mettre un 0 à la fin de ta chaîne. Par contre, le retour chariot est inclus dans la chaîne (s'il y a la place).  
Va voir là:
  http://www.cplusplus.com/ref/cstdio/fgets.html
 
Parce que franchement, ton code est immonde et aucun prof ne laissera passer ça. Sinon, tu pourras demander à ton prof pourquoi vous n'apprenez pas à utiliser les flux et la STL ?

n°905666
Slide
Posté le 23-11-2004 à 15:21:59  profilanswer
 

Masklinn a écrit :

Le retour à la ligne?


Oui et non.
En faite, c'est le 0 que Lam's vient d'expliquer.
(et Oui car il y a un retour chariot aussi).
 

Lam's a écrit :

Tu as du mal l'utiliser alors. Elle ne rajoute rien, et elle te garantis de mettre un 0 à la fin de ta chaîne. Par contre, le retour chariot est inclus dans la chaîne (s'il y a la place).  
Va voir là:
  http://www.cplusplus.com/ref/cstdio/fgets.html
 
Parce que franchement, ton code est immonde et aucun prof ne laissera passer ça. Sinon, tu pourras demander à ton prof pourquoi vous n'apprenez pas à utiliser les flux et la STL ?


 
Mon code est immonde ;) Je sais j'ai compris lol.
Pour les flux et compagnie, bha en faite on vient de commencer le C++, on en est au chapitre 5, et c'est une ecole en alternance ou je suis, chaqu'un doit faire des efforts en dehors des cours en faite.
 
Je viens d'ouvrir ta page, je vais lire.
 
Pour le 0 enfin de chaine, je suis obligé de vivre avec ? Car avec un scanf et un getchar (si je me trompe pas) il n'y en a pas :'(.

n°905671
masklinn
í dag viðrar vel til loftárása
Posté le 23-11-2004 à 15:24:16  profilanswer
 

Slide a écrit :

Pour le 0 enfin de chaine, je suis obligé de vivre avec ? Car avec un scanf et un getchar (si je me trompe pas) il n'y en a pas :'(.


Ben la chaine de caractères C c'est un tableau de chars tout moisi, donc \0 sert à savoir que t'es à la fin de la chaîne, s'tutile quand même histoire d'éviter de te ballader n'importe ou :whistle:  
 
Comme dit lam's, essaie de voir pour la STL


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
mood
Publicité
Posté le 23-11-2004 à 15:24:16  profilanswer
 

n°905685
Slide
Posté le 23-11-2004 à 15:38:36  profilanswer
 

Sinon je sujet, si ca vous interresses, c'est :
 

Citation :

Saisir un texte. Rangers les caractères en mémoire. Lire le contenu de la mémoire et y compter le nombre d'espaces et de lettres 'e'.


 
Ne me faite pas l'exo, k ? ;) Je veux le faire petit à petit (l'oiseau fait son nid ;p).
 

Code :
  1. const char longueur=100; // Longueur maximale de la chaine a saisir.
  2. char* saisies;
  3. saisies = (char*)malloc(longueur+1);
  4. fgets(saisies,longueur+1,stdin);


 
Voilà le code actuel, rien à dire cette fois :s ?
 
Edit : Petite correction x2


Message édité par Slide le 23-11-2004 à 15:45:44
n°905700
Slide
Posté le 23-11-2004 à 15:48:35  profilanswer
 

Lam's a écrit :

1. Très mauvais idée de stocker ta longueur dans un char. Sur la plupart des plate-formes, ça ne te donne une taille maximum qui n'est que de 127. Utilises plutôt size_t qui est un alias vers le bon type pour représenter des tailles mémoires.


 
?!
 
const size_t longueur à la place de const char longueur ? :s
 
 
EDIT :

Citation :

size_t correspond à un unsigned int.


Bon ben k, va pour size_t :).


Message édité par Slide le 23-11-2004 à 15:52:47
n°905705
Lam's
Profil: bas.
Posté le 23-11-2004 à 15:53:48  profilanswer
 

Slide a écrit :

?!
 
const size_t longueur à la place de const char longueur ? :s


 
Exactement.
 
Sinon, en C++, on n'utilise d'habitude pas malloc, mais "new" et "delete". Tu verras ça sans doute plus tard. Sache juste que c'est pas une habitude que tu conserveras.
 
Et d'autre part, on aime bien prendre l'habitude de donner directement une valeur aux variables qu'on déclare. Donc:  
char * saisies = (char*)malloc(longueur+1);

n°905709
Slide
Posté le 23-11-2004 à 16:01:37  profilanswer
 

Merci pour tout à vous ts ;).
Voilà donc le code actuel (propre lol !).
 

Code :
  1. const size_t longueur=100; // Longueur maximale de la chaine a saisir. (size_t correspond à un unsigned int.)
  2. char* saisies = (char*)malloc(longueur+1);
  3. fgets(saisies,longueur+1,stdin);


 
Il y a t'il moyen de savoir la taille qu'occupe dans la memoire la saisie qui a été faite par fgets  ?

n°905716
Lam's
Profil: bas.
Posté le 23-11-2004 à 16:05:46  profilanswer
 

Slide a écrit :

Il y a t'il moyen de savoir la taille qu'occupe dans la memoire la saisie qui a été faite par fgets  ?


Pas directement. Mais vu que c'est une chaîne classique terminée par un 0, tu peux bien sûr faire:
 
size_t taille = strlen(saisies);
 
Edit: j'ai mis un size_t plutôt, y a pas de raisons...


Message édité par Lam's le 23-11-2004 à 16:08:32
n°905718
blackgodde​ss
vive le troll !
Posté le 23-11-2004 à 16:06:27  profilanswer
 

strlen(saisies)
 
edit : :hot:


Message édité par blackgoddess le 23-11-2004 à 16:07:18

---------------
-( BlackGoddess )-
n°905722
blackgodde​ss
vive le troll !
Posté le 23-11-2004 à 16:08:31  profilanswer
 

Lam's a écrit :

Pas directement. Mais vu que c'est une chaîne classique terminée par un 0, tu peux bien sûr faire:
 
int taille = strlen(saisies);


 
et size_t ?


---------------
-( BlackGoddess )-
n°905726
Lam's
Profil: bas.
Posté le 23-11-2004 à 16:09:36  profilanswer
 


Vi, je venais juste de m'en rendre compte. Je pensais à autre chose. :whistle:

n°905727
Slide
Posté le 23-11-2004 à 16:11:27  profilanswer
 

Lam's a écrit :

Pas directement. Mais vu que c'est une chaîne classique terminée par un 0, tu peux bien sûr faire:
 
int taille = strlen(saisies);


 
Ok, je vais faire comme ça.
Maintenant il ne me reste qu'à lire chaque Char dans la memoire et de compter le nombre de 'e' et de ' ', j'ai deja fait mon script avec un switch.
 
Je te remercie pour tout.

n°905731
Taz
bisounours-codeur
Posté le 23-11-2004 à 16:12:10  profilanswer
 

le cast du malloc alors
 
/me récupère parès lecture de la boucle malloc-scanf(%c, etc ..

n°905733
Slide
Posté le 23-11-2004 à 16:12:36  profilanswer
 

Lam's a écrit :

Vi, je venais juste de m'en rendre compte. Je pensais à autre chose. :whistle:


 
Je mets size_t ? lol J'y avais pensé aussi, mais bon, comme c'est moi le noob là, j'evite les commentaires lol.

n°905735
Lam's
Profil: bas.
Posté le 23-11-2004 à 16:13:02  profilanswer
 

Taz a écrit :

le cast du malloc alors
 
/me récupère parès lecture de la boucle malloc-scanf(%c, etc ..


C'est du C++... :(

n°905738
Taz
bisounours-codeur
Posté le 23-11-2004 à 16:14:37  profilanswer
 

PUTAIN QUI EST LE CON QUI A RÉPONDU FGETS !
 
 
string line;
getline(cin, line);
 
:o

n°905740
Lam's
Profil: bas.
Posté le 23-11-2004 à 16:16:10  profilanswer
 

Slide a écrit :

Je mets size_t ? lol J'y avais pensé aussi, mais bon, comme c'est moi le noob là, j'evite les commentaires lol.


Oui, utilise size_t.
 
J'avais mis int, parce que j'étais en train de me dire qu'il fallait d'indiquer que justement, size_t n'est pas forcément un int. Ca peut être autre chose en fonction de l'environnement (OS/Compilo).  

n°905746
Slide
Posté le 23-11-2004 à 16:21:13  profilanswer
 

Taz a écrit :

PUTAIN QUI EST LE CON QUI A RÉPONDU FGETS !
 
 
string line;
getline(cin, line);
 
:o


 
[:totoz]

n°905755
Slide
Posté le 23-11-2004 à 16:29:18  profilanswer
 

getline, je change tout pour utiliser ca ? :s arg lol


Message édité par Slide le 23-11-2004 à 16:33:02
n°905757
Taz
bisounours-codeur
Posté le 23-11-2004 à 16:31:00  profilanswer
 

oui. fini les malloc et les pointeurs. Fais du C++. Je pense que tu comprendras facilement que dans la vie, on a autre chose à faire que des pointeurs++ et malloc/scanf(%c

n°905761
Slide
Posté le 23-11-2004 à 16:34:38  profilanswer
 

Bha le theme de mon chapitre, c les malloc et les pointeurs en faite :s, je l'ai pas dit, bon ok, dsl lol.

n°905763
Taz
bisounours-codeur
Posté le 23-11-2004 à 16:35:15  profilanswer
 

mais tu fais du C ou du C++ bordel ?

n°905766
Lam's
Profil: bas.
Posté le 23-11-2004 à 16:36:56  profilanswer
 

Taz, relis son post de 15h21:59.


Message édité par Lam's le 23-11-2004 à 16:37:24
n°905772
SomeBugsIn​Me
life suxx
Posté le 23-11-2004 à 16:40:55  profilanswer
 

ben il doit sûrement faire du C
Comme souvent son cours doit s'appeller C++ alors qu'il ne commencera le C++ qu'après la moitié de l'année scolaire  :sarcastic:  
 

n°905775
Taz
bisounours-codeur
Posté le 23-11-2004 à 16:43:13  profilanswer
 

gasp :/
y en a vraiment qui mettent toutes les chances de leur côtés

n°905777
Lam's
Profil: bas.
Posté le 23-11-2004 à 16:45:05  profilanswer
 

Slide a écrit :

getline, je change tout pour utiliser ca ? :s arg lol


Bah c'est ce qu'on t'indique depuis le début de façon plus ou moins délicate en fait: ton code là, c'est du C, pas du C++. Mais pour pouvoir utiliser string, cin et autres, il te faudra connaître les iostreams et la STL. Bref, plus tard quoi.

n°905778
Slide
Posté le 23-11-2004 à 16:45:25  profilanswer
 

En faite c'est du C... :s lol.

n°905780
Lam's
Profil: bas.
Posté le 23-11-2004 à 16:46:17  profilanswer
 

Taz a écrit :

gasp :/
y en a vraiment qui mettent toutes les chances de leur côtés


Le pire dans tous ça, c'est que dans la plupart des cas, c'est moi, le contribuable, qui paye pour ce type d'enseignement. Tu m'étonnes que les gens votent Chirac après ça.  :lol:

n°905781
Taz
bisounours-codeur
Posté le 23-11-2004 à 16:46:25  profilanswer
 

donc on en revient à la question du cast

n°905783
schnapsman​n
Zaford Beeblefect
Posté le 23-11-2004 à 16:47:08  profilanswer
 

Taz a écrit :

gasp :/
y en a vraiment qui mettent toutes les chances de leur côtés


c'est ce qui t'es arrivé et tu en est revenu non? pas le peine de mouiller ton slip pour ça hein [:petrus75]


---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
n°905896
el muchach​o
Comfortably Numb
Posté le 23-11-2004 à 18:09:57  profilanswer
 

schnapsmann a écrit :

c'est ce qui t'es arrivé et tu en est revenu non? pas le peine de mouiller ton slip pour ça hein [:petrus75]


Je suis assez d'accord avec lui, l'intérêt d'apprendre le C en préalable à un cours de C++ m'échappe, ça ne me parait absolument pas une étape obligée.
C'est tjrs mieux que les facs qui décident de faire de Javascript le fondement de son enseignement, mais quand même... :/

n°905899
schnapsman​n
Zaford Beeblefect
Posté le 23-11-2004 à 18:16:52  profilanswer
 

el muchacho a écrit :

Je suis assez d'accord avec lui, l'intérêt d'apprendre le C en préalable à un cours de C++ m'échappe, ça ne me parait absolument pas une étape obligée.
C'est tjrs mieux que les facs qui décident de faire de Javascript le fondement de son enseignement, mais quand même... :/


 
RCM:

  • parce que le C99 est quasiment un sous ensemble du C++?
  • à cause des concepts qui fuient?


Message édité par schnapsmann le 23-11-2004 à 18:34:36

---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
n°905914
Taz
bisounours-codeur
Posté le 23-11-2004 à 18:44:57  profilanswer
 

schnapsmann a écrit :

RCM:

  • parce que le C99 est quasiment un sous ensemble du C++?
  • à cause des concepts qui fuient?


heink ? le C a une intersection non-nulle avec le C++, le C99 a plus de divergences avec le C++98 que le C ANSI

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Incrementation dans un test ?

 

Sujets relatifs
Incrémentation DateFAQ et outils de test j2ee
test if et gotoProbleme de test sur une variable en VB
Le test du singecompteur avec incrementation auto
obtenir un certificat de test[Javascript] Input File - Griser le textfield / Test sur le fichier
Faire un test sur une variableincrementation de fichier (deuxieme edition !)
Plus de sujets relatifs à : Incrementation dans un test ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR