Problème de charactères !

Fermé
spriatez Messages postés 180 Date d'inscription lundi 6 décembre 2010 Statut Membre Dernière intervention 8 mai 2017 - 2 juin 2016 à 00:45
spriatez Messages postés 180 Date d'inscription lundi 6 décembre 2010 Statut Membre Dernière intervention 8 mai 2017 - 2 juin 2016 à 14:44
Bonjour à toutes et tous !

Voilà, je me suis lancé dans un petit programme histoire d'apprendre un peu le C++ :D Néanmoins, j'ai des petits problèmes, que je ne comprend pas ! Je vous explique.

Mon code est censé générer 10 caractères à la suite, les mettre dans une chaîne de caractère et donc créer une chaîne.


#include <iostream>
#include <cstdlib>
#include <ctime>
#include <string.h>
#include <stdio.h>

using namespace std;

int main(void)
{
const char alphabet[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char c;
size_t indice;
srand(time(NULL));


char tampon[50];

// Rand lettre
for(int j=0; j<9; j++)
{
indice = rand() % (25 + 1);
c = alphabet[indice];
sprintf(tampon + strlen(tampon), "%c", c);
cout << tampon << endl;

}

return 0;
}



Donc j'ai bien tout qui ce genère ! (Bon, sur 10 lignes, j'en voudrais qu'une mais j'essaierais de regler ce problème plus tard, pour l'instant, le gros problème qui perciste, c'est que j'obtiens des caractères pas normaux avant les lignes ! Et par moment, j'ai pas les caractères spéciaux :


�S�h�H
�S�h�HX
�S�h�HXD
�S�h�HXDD
�S�h�HXDDK
�S�h�HXDDKY
�S�h�HXDDKYR
�S�h�HXDDKYRG
�S�h�HXDDKYRGO
�S�h�HXDDKYRGOM
Press <RETURN> to close this window...


Je ne comprend pas où ce trouve le problème étant donné que par moment les "�S�h�" ne sont pas présents.

Je vous en remercie d'avance !
Cordialement.


1 réponse

Franck7511 Messages postés 14296 Date d'inscription jeudi 24 décembre 2009 Statut Membre Dernière intervention 10 août 2017 1 121
Modifié par Franck7511 le 2/06/2016 à 13:10
Initialise tampon avec des zéros si tu veux que ça marche.

Sinon tu as pas trouvé plus lent comme technique ?

Et ce que tu fais c'est pas du C++ mais du C (sale)
0
spriatez Messages postés 180 Date d'inscription lundi 6 décembre 2010 Statut Membre Dernière intervention 8 mai 2017
2 juin 2016 à 14:33
Bonjour,

Je te remercie de ta réponse. :) Effectivement, cela fonctionne.

Plus lent ? Comment ça ?

Je débute en C++, j'essaye de trouver certaines choses mais bon..
0
Franck7511 Messages postés 14296 Date d'inscription jeudi 24 décembre 2009 Statut Membre Dernière intervention 10 août 2017 1 121
Modifié par Franck7511 le 2/06/2016 à 14:44
#define LENGTH 10

int main(void)
{
    size_t indice;
    srand(time(NULL));     // Doit être évité, le C++ fournit <random>...
    char tampon[LENGTH + 1] ={0}; // 10 caractères + \0 final
    for(int j=0; j< LENGTH; j++)  // Et non 9 !
    {
        indice = rand() % 26; // Pourquoi 25 + 1 ?
        tampon[j] = 'A' + indice;
    }
    std::cout << tampon << std::endl; // Output une seule fois, à la fin
    return 0;
}


Serait déjà plus rapide. Mais ça reste plus du C que du C++.
Le rand() est mauvais si tu cherches une bonne distribution statistique, en effet vu que l'intervalle des valeurs retournées par rand() n'a aucune raison d'être divisible par 26, tu auras plus de chances de tomber sur certaines valeurs.
Secundo, le standard ne dit rien sur la qualité du générateur. Donc pour ton exemple c'est ok, si tu veux faire des simulations physiques, financières ou de la cryptographie, etc : c'est non.

#include <iostream> // Ok
#include <cstdlib>  // Ok mais <random> c'est mieux
#include <ctime>   // Ok mais idem
#include <string.h>// Non
#include <stdio.h> // Non

using namespace std; // Non
0
spriatez Messages postés 180 Date d'inscription lundi 6 décembre 2010 Statut Membre Dernière intervention 8 mai 2017 > Franck7511 Messages postés 14296 Date d'inscription jeudi 24 décembre 2009 Statut Membre Dernière intervention 10 août 2017
2 juin 2016 à 14:44
Je vois, il y a effectivement plein de choses à modifier !

Merci en tout cas ! :D
0