Boucle for : asser d'un entier en caractère

Résolu
Pilotwings Messages postés 14 Date d'inscription mercredi 24 décembre 2008 Statut Membre Dernière intervention 14 mai 2010 - 28 déc. 2008 à 12:38
cs_stephane57 Messages postés 12 Date d'inscription lundi 17 décembre 2007 Statut Membre Dernière intervention 6 janvier 2009 - 30 déc. 2008 à 18:19
Bonjour, j'ai à ma disposition un petit programme contenant une boucle for avec un entier "i". Je vous présente le petit programme :

#include
int main()
{
   for (int i = 0; i<128; i++)
   std::cout << i;
   system ("pause");
   return 0;
}

Voilà ce que je veux faire, je souhaiterai changer mon entier "i" en char (caractère). Savez vous comment y parvenir ?

14 réponses

Pilotwings Messages postés 14 Date d'inscription mercredi 24 décembre 2008 Statut Membre Dernière intervention 14 mai 2010
29 déc. 2008 à 18:28
Salut, j'ai essayé ton programme mais il ne fonctionne pas. J'ai le message d'erreur suivant :

4 C:\Users\Rodolphe\Documents\coursC++\Chapitre3\test.cpp `main' must return `int'
3
cs_goodboy21 Messages postés 29 Date d'inscription samedi 1 décembre 2007 Statut Membre Dernière intervention 11 avril 2010
28 déc. 2008 à 13:53
fait un cast.
std::cout<<(char) i;
0
lglandeur Messages postés 28 Date d'inscription samedi 11 juin 2005 Statut Membre Dernière intervention 20 janvier 2009
28 déc. 2008 à 14:46
il y a encore plus simple que de faire un cast, il suffit de fair sa boucle for avec un caractère au lieu d'un entier.

for(char c=0; c<128; c++)
std::cout << c;
0
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
28 déc. 2008 à 15:47
wep, et là il va boucler indéfiniement son mini soft ^^

en tout cas sous ubuntu , j'ai checké mon modifié et il s'arrête bien à 127 comme je le supposais

//#include <stdio.h>    // printf...
#include     // cout ...

int main (int argc, char* argv[])
{
for(char c=100; c>0; c++)
std::cout << (int)c << '\n';
  return 0;
}

___________________________________________________________
Magicalement
Nono
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Pilotwings Messages postés 14 Date d'inscription mercredi 24 décembre 2008 Statut Membre Dernière intervention 14 mai 2010
28 déc. 2008 à 18:18
lglandeur, j'ai essayer ton programme avant que tu l'écrive. J'ai du rallumer mon pc lol !!
Alors, merci Magic_Nono car ton programme fonctionne

#include    
int main (int argc, char* argv[])
{
for(char c=100; c>0; c++)
std::cout << (int)c << '\n';
system ("pause");
  return 0;
}

Mais peux tu m'expliquer la ligne int main (int argc, char* argv[]) stp ?

Encore merci ^^
0
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
28 déc. 2008 à 23:18
Tu aurais pu couper ton programme avec CTRL+C,

à l'avenir, plus besoin de rebooter pour si peu.

plus d'explication sur la ligne du main ici, dernier com:
http://www.vbfrance.com/forum/sujet-AFFICHER-CARACTERE-DANS-CHAINE_1243526.aspx

ce truc n'était pas dans la bonne section (VB) mais bon...suis tombé dessus par hasard.

en résumé
c'est pour les paramètres à l'appel de ton exécutable
#include <stdio.h>
int main( int argc, const char* argv[] )
{
// Prints each argument on the command line.
for( int i = 0; i < argc; i++ )
printf( "arg %d: %s\n", i, argv[i] );
}



pense à valider les réponses satisfaisantes,

Bon bout d'an
++
___________________________________________________________
Magicalement
Nono
0
Pilotwings Messages postés 14 Date d'inscription mercredi 24 décembre 2008 Statut Membre Dernière intervention 14 mai 2010
29 déc. 2008 à 11:59
Merci de ton aide car ton programme fonctionne. J'ai regardais le lien que tu m'as écris et je n'ai pas beaucoup compris la ligne
(int argc, char* argv[])
J'ai appris que agrc était un nombre et que argv[] était un paramètre. Mais pourquoi faire char*argv[] ?
0
snake7682 Messages postés 5 Date d'inscription jeudi 4 octobre 2007 Statut Membre Dernière intervention 6 novembre 2017
29 déc. 2008 à 12:04
c quoi ce bordel? c une boucle infinie, si vous lui dites dans la condition c>0, quand est ce que ca va s'arreter?' c 'est tjrs >0.
0
lglandeur Messages postés 28 Date d'inscription samedi 11 juin 2005 Statut Membre Dernière intervention 20 janvier 2009
29 déc. 2008 à 13:07
c'est vrais que tester le fait que se soit >0 peut paraitre bizarre, mais en fait il ne faut pas oublier que par défaut les type sont signé en C et C++ (chose qui m'était sortie de la tête au moment de l'écriture de mon bout de code).

Donc quand on déclare une variable de type char (codé sur un octet) les valeur possible vont de -128 à 127. par conséquence une foi que l'on est a la valeur 127 et qu'on lui rajoute 1 il ne passe pas a 128, mais a -128.

c'est pour cela que mon programme boucle a l'infini et que celui de Magic_nono fonctionne.

sinon pour que mon programme fonction il suffit de déclaré la variable en type unsigned char, et la les valeur possible sont 0 à 255.

voila j'espère avoir était clair.
0
cs_stephane57 Messages postés 12 Date d'inscription lundi 17 décembre 2007 Statut Membre Dernière intervention 6 janvier 2009
29 déc. 2008 à 17:12
Bonjour à tous,

j'ai lu avec attention les messages des uns et des autres et je constate avec plaisir que le forum est toujours aussi actif.

j'ai testé les différentes solutions proposées et je propose donc un petit source très simple qui n'est que la synthèse de tout ce qui a été brillament développé dans ce forum:

#include

unsigned

short
int main(){

for (
unsigned
char valeur=0 ; valeur<128 ; valeur++){

std::cout << valeur ;

}

return

0;}
0
cs_stephane57 Messages postés 12 Date d'inscription lundi 17 décembre 2007 Statut Membre Dernière intervention 6 janvier 2009
29 déc. 2008 à 17:14
Bon désolé pour le poste précédent, la mise en page des réponses est parfois houleuse.

Ci-dessous le code le plus simple:

#include


unsigned short int main()
{


 for (unsigned char valeur=0 ; valeur<128 ; valeur++)
 {
  std::cout << valeur ;
 }


return 0;
}
0
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
29 déc. 2008 à 19:23
Merci Stephane pour le résumé, en effet, il fait ce qui est demandé au départ

Pilot, vire le "unsigned short " précédant le int du main...
___________________________________________________________
Magicalement
Nono
0
Pilotwings Messages postés 14 Date d'inscription mercredi 24 décembre 2008 Statut Membre Dernière intervention 14 mai 2010
30 déc. 2008 à 11:24
Slt, j'avais déjà essayé cette manière,  je n'ai pas de message d'erreur mais je n'ai pas le résultat attendu.
J'obtients : 
?????
?¤????¶§?????????? !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]
^_`abcdefghijklmnopqrstuvwxyz{|}~¦Appuyez sur une touche pour continuer...
0
cs_stephane57 Messages postés 12 Date d'inscription lundi 17 décembre 2007 Statut Membre Dernière intervention 6 janvier 2009
30 déc. 2008 à 18:19
salut Pilotwings,

pour la ligne de code :       unsigned short int main()  

elle fonctionnait parfaitement sous Microsoft Visual C++ 2008, mais il est vrai que pour une meilleure compatibilité entre les différents environnements de développement en C++, un simple   :  int main()  aurait été plus adéquat.... c'est une vieille habitude, je préfère spécifier explicitement si le type int est short ou long (car si ce n'est pas spécifié explicitement, ça dépendra de chaque processeur...)

pour l'affichage un peu bizarre que tu obtiens, c'est tout à fait normal.
on affiche les uns à la suite des autres les 128 premiers caractères de la table des caractères ASCII/non ASCII. Comme il y a quelques caractères spéciaux, des retours chariot etc, ça te fait un affichage un peu étrange mais le programme s'est bien exécuté.

Le but du post était de montrer comme faire une boucle la plus simple possible avec un compteur qui est directement sous la forme du type caractère.
Cela évitait de passer par une boucle avec un compteur de type entier, où il fallait convertir dans le corps de la boucle (avec opérateur de cast) chacun des entiers en type caractère.... Evitons les conversions de types quand on peut s'en passer...
0
Rejoignez-nous