0
votes

Sortie bizarre en générateur de mots aléatoire

Je suis confronté à des problèmes avec la sortie du programme suivant. Le programme génère de manière aléatoire des mots, d'abord une consonne aléatoire puis une voyelle aléatoire, puis de la même manière pour le nombre maximal de lettres que vous souhaitez.

Lorsque j'imprime le mot généré juste après son générée, cela me donne une liste de mots , comme prévu. Lorsque je suis sorti du mot générant et empilant une boucle et imprimez une puissance des mots à nouveau, je reçois tous les mots qui ont été écrasés dans une longue chaîne, c'est vraiment bizarre. Qu'est-ce qui ne va pas? xxx

sortie: xxx


5 commentaires

Veuillez ajouter des sorties attendues et réelles.


Ouais désolé, fait.


Il n'y a pas de place dans la matrice pour le terminateur à chaîne. Essayez de changer Char Words [Maxletters] [Maxoulettters]; à Char Mots [Motswords] [Maxletters + 1];


Bien! bien sûr! Merci


@Meathervane vous devriez poster cela comme la réponse. À moins que quelqu'un puisse être dérangé de creuser un Terminator NULL manquant approprié Dupe.


3 Réponses :


3
votes

Il n'y a pas de place dans le tableau pour le terminateur de chaîne. En conséquence, écrire le terminateur '\ 0' est un comportement indéfini. En pratique (puisqu'un tableau 2D est contigu)), le terminateur a été écrit à la chaîne suivante, qui a ensuite été écrasée par ses données.

Essayez de changer xxx

à < / p> xxx


0 commentaires

4
votes

C'est parce que c'est être stocké de manière continue sans aucun caractère nul.

Méthode 1: Si vous voulez simplement l'imprimer correctement, vous pouvez le faire en écrivant en dessous de la ligne: xxx

comme xxx

méthode 2 :

Déclarez des mots comme xxx

et écrivez l'intérieur pour boucle comme xxx


1 commentaires

Votre méthode 1 effraie les Windies de moi mais c'est correct. Avoir un uppote.



1
votes

Aussi,

Surveillez-vous pour Int code> Overflow. p>

code n'assure pas 0 , donc a * xcur + c code> Les résultats peuvent alors dépasser int_max code> ... p> xxx pré>

... résultant en UB: Les valeurs négatives probables peuvent ensuite revenir de la fonction. P>

int lcg(int Xcur)       /*linear congruential generator*/
{
    unsigned A = 445, C = 700001, M = 2097152;
    int Xnext = (A * Xcur + C) % M;
    return Xnext;
}


0 commentaires