[C/C++] Très grands débutants - Caractère bizarre

Très grands débutants - Caractère bizarre [C/C++] - Programmation

Marsh Posté le 29-05-2001 à 19:04:55    

Bonjour.
J'ai voulu essayer les Arrays. Mon But : un programme où l'utilisateur tape une phrase et cela affiche la phrase à l'envers.
 
Mon prog :
 
#include <iostream.h>
 
main ()
{
char Tableau[100];
int i;
bool fini = false;
 
 
for (i=0; i< 100 && !fini; i++)
 {
 cin >> Tableau[i];
 if (Tableau[i] == '!')fini=true;
 }
for (i ;i>=0;i--)
 {
 cout << Tableau[i];
 }
}
 
 
Et ca me renvoie ca à l'execution :
 
C:\prog>inverse
Vive le Forum Programmation!
┤!noitammargorPmuroFeleviV
C:\prog>
 
Vous remarquerez un caractère bizarre : "┤" présent au début, et totalement aléatoire. En gros le prog me sort tjrs un caractère au pif la première fois, et je vois pas pourquoi.
 
Merci très beaucoup d'avance de m'éclairer.


---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.
Reply

Marsh Posté le 29-05-2001 à 19:04:55   

Reply

Marsh Posté le 29-05-2001 à 19:16:47    

la caractere en question est le retour chariot qui est pris en compte ds le flux. voici un version de ton prog qui marche:
 
#include <iostream.h>
 
main ()
{
 char Tableau[100];
 int i;
 
 for (i=0; i< 100; i++)
 {
  cin >> Tableau[i];
  if (Tableau[i] == '!') {break;}
 }
 for (;i>=0;i--)
 {
 cout << Tableau[i];
 }
}
 
en plus ta pas vraiment besoin du booleen "fini"

Reply

Marsh Posté le 29-05-2001 à 19:30:37    

merciiiiii
 
pour le booléen ben j'avais pas tellement d'idées (et en prog quand on a ni les connaissances ni les idées...)
 
for (;i>=0;i--)  
 
le i est pas obligatoire dans la boucle for ?
et pourquoi ton prog prend pas le retour de chariot et le mien oui ?

 

[edit]--Message édité par Xavier_OM--[/edit]


---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.
Reply

Marsh Posté le 29-05-2001 à 19:48:56    

C'est parce qu'avec un "break", l'execution de la boucle est interrompue immédiatement, alors que dans ton code l'execution se poursuivait jusqu'à la prochaine évaluation de la condition de sortie.
Etant donné que tu débutes, je me permets de m'étendre un peu sur la question :
 
La boucle for prend trois paramètres, dont aucun n'est obligatoire en théorie. Le premier rassemble la ou les conditions initiales,  qui peuvent être omises si elles ont été faites avant dans le programme. Le deuxième est la condition à respecter pour que l'éxecution de la boucle se poursuive. La troisième instruction est executée à la fin de chaque cycle.
 
Lorsque tu écris for(i=0;i<10;i++){instructions}, ces instructions sont executées dans l'ordre suivant :
i=0
i<10 ? si non, fin de la boucle
instructions
i++
i<10 ?
instructions
i++
...
 
Ainsi dans ta boucle, lorsque la condition "if (Tableau[i] == '!')fini=true;" est vérifiée, la variable i est incrémentée avant que la condition de sortie "i< 100 && !fini" soit traitée. Et ton programme prend donc en compte un caractère de trop.
 
Voilà, j'espère que j'ai été un peu clair !

Reply

Marsh Posté le 29-05-2001 à 20:02:11    

voila nnovic a tout dit ;)
Pour le i comme tu ne fait aucune initialisation (i a un certaine valeur a la sortie de la boucle precedente) donc pas besoin de mettre la premiere instruction du if :
la ligne "for (i;i>=0;i--)" est identique à "for (;i>=0;i--)"  
mais bon les programmeurs C ont souvent la manie de virer tt ce qui n'est pas indispensable ds un prog :)

Reply

Marsh Posté le 29-05-2001 à 20:08:45    

Je vous remercie tous beaucoup pour ces explications vraiment très claires. :):):)


---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed