Boucle for : asser d'un entier en caractère [Résolu]

Messages postés
14
Date d'inscription
mercredi 24 décembre 2008
Statut
Membre
Dernière intervention
14 mai 2010
- - Dernière réponse : 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 ?
Afficher la suite 

14 réponses

Meilleure réponse
Messages postés
14
Date d'inscription
mercredi 24 décembre 2008
Statut
Membre
Dernière intervention
14 mai 2010
3
Merci
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'

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 213 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Pilotwings
Messages postés
29
Date d'inscription
samedi 1 décembre 2007
Statut
Membre
Dernière intervention
11 avril 2010
0
Merci
fait un cast.
std::cout<<(char) i;
Commenter la réponse de cs_goodboy21
Messages postés
28
Date d'inscription
samedi 11 juin 2005
Statut
Membre
Dernière intervention
20 janvier 2009
0
Merci
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;
Commenter la réponse de lglandeur
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1
0
Merci
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
Commenter la réponse de magic_Nono
Messages postés
14
Date d'inscription
mercredi 24 décembre 2008
Statut
Membre
Dernière intervention
14 mai 2010
0
Merci
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 ^^
Commenter la réponse de Pilotwings
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1
0
Merci
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
Commenter la réponse de magic_Nono
Messages postés
14
Date d'inscription
mercredi 24 décembre 2008
Statut
Membre
Dernière intervention
14 mai 2010
0
Merci
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[] ?
Commenter la réponse de Pilotwings
Messages postés
5
Date d'inscription
jeudi 4 octobre 2007
Statut
Membre
Dernière intervention
6 novembre 2017
0
Merci
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.
Commenter la réponse de snake7682
Messages postés
28
Date d'inscription
samedi 11 juin 2005
Statut
Membre
Dernière intervention
20 janvier 2009
0
Merci
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.
Commenter la réponse de lglandeur
Messages postés
12
Date d'inscription
lundi 17 décembre 2007
Statut
Membre
Dernière intervention
6 janvier 2009
0
Merci
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;}
Commenter la réponse de cs_stephane57
Messages postés
12
Date d'inscription
lundi 17 décembre 2007
Statut
Membre
Dernière intervention
6 janvier 2009
0
Merci
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;
}
Commenter la réponse de cs_stephane57
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1
0
Merci
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
Commenter la réponse de magic_Nono
Messages postés
14
Date d'inscription
mercredi 24 décembre 2008
Statut
Membre
Dernière intervention
14 mai 2010
0
Merci
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...
Commenter la réponse de Pilotwings
Messages postés
12
Date d'inscription
lundi 17 décembre 2007
Statut
Membre
Dernière intervention
6 janvier 2009
0
Merci
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...
Commenter la réponse de cs_stephane57