CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[SDL] affichage avec sdl_ttf

Shiba_the_Inu
Shiba_the_Inu
Niveau 85
02 janvier 2009 à 14:30:58

Bonjour bonjour, alors je vous m'expose mon problème :
J'ai décidé de reprendre la programmation en c, qui ma beaucoup manquée je dois avouer :'(...
Et depuis ce matin j'ai un problème que je ne comprends pas. je vous expose la partie du code qui ne marche pas :
http://rafb.net/p/Q8L3VS73.html

si vous ne comprenez pas quelque chose, ou ma logique assez bancale n'hésitez pas, je pense que ce doit être un code assez crade m'enfin :s..
Donc le truc pour détailler c'est que je voudrais que quand l'utilisateur tape une lettre pour mettre le nom de sa carte, que ça s'écrive dans la fenêtre de la SDL. la variable carAct sert à bouger dans le tableau ou est stocké le nom de la carte : si on fait effacer on efface la lettre actuelle et on revient donc à la valeur précédente, et avec espace on saute donc une "case" si j'ose dire du tableau.
Ça marche presque mais j'ai le problème que des que j'écris une lettre la suivante s'affiche en double, la suivante en triple etc... et les espace/suppression affiche des carrés (du moins les espaces marche tant qu'on fait pas effacer).. Donc le problème vient de l'affichage puisque après dans le fichier où est sauvegarder le nom, c'est le bon (malgré les espaces et les effacer)...

Alors j'aimerai savoir où est le problème :s
A noter aussi qu'après quelques essais le fichier avec le nom est devenu un binaire Oo je peux plus l'ouvrir avec l'éditeur de texte... pourtant je croyais que pour écrire en binaire c'était avec l'option "X+b", genre a+b w+b etc.. ??? si vous avez aussi une idée ?

Voilà donc désolé du dérangement et si vous avez des questions pour un truc qui vous paraît pas clair j'essayerai de vous expliquer ou je veux en venir.
Merci d'avance :)

Shiba_the_Inu
Shiba_the_Inu
Niveau 85
02 janvier 2009 à 14:32:26

dsl du double post j'ai remarqué que j'ai pas changé, j'ai laissé c++ dans le lien, mais c'est bien un code en c :x

dnob700
dnob700
Niveau 10
02 janvier 2009 à 16:27:10

Il y a deux trois petits problèmes :

Je ne suis pas sur que l'initialisation de ton tableau caract soit bonne. I.e., je crois que tu ne mets de zéro que dans la première case du tableau et non pas dans toutes, ce qui fait qu'il faut que tu ajoute un zéro après chaque caractère que tu écris dans ton tableau si je ne me trompe pas.

Quand tu as un appuie sur basckspace, il ne faut pas mettre ' ' dans ton tableau, mais 0 (le nombre zéro) et il faut le faire à la position caract-1 (ou alors décrémenter caract avant de faire l'affectation), et il faut le faire si caract>0 et non pas >-1 (vu que tu l'initialise à 0).

Tu n'a le droit de mettre que 19 caractère dans ton tableau, car le dernier est réservé pour le 0 final, donc tes tests doivent devenir if (caract<19) ou alors, crée un tableau de taille 21 et non pas 20.

Et enfin, ta fonction TTF_RenderText_Blended écrit une chaîne de caractère et non pas un seul caractère, donc elle écrit bien n fois le caractère n car elle écrit d'abord toutes la chaines, puis tout à partir du deuxième caractère, etc. Appelle là une seule fois avec l'adresse de ta chaine (comCarte, et la variable carAct2 devient inutile).

Enfin, quand tu écrit le fichier à la fin il ne faut boucler que jusqu'à carAct (à plus ou moins 1 près), pour ne pas écrire des caractères que l'utilisateur n'a pas écrit. Ou alors utiliser une fonction du genre fprintf ou fputs (si elle existe) qui vont écrire toutes la chaines d'un seul coup.

Pour le fichier binaire, ton problème vient de ce que tu compilait ton programme en debug avant, puis que tu t'es mis à la compiler en release je pense et donc ton tableau n'est plus initialisé avec des 0 partout (alors qu'il l'est dans le cas debug je crois) ce qui fait que tu vois des caractères quelconque dedans. Mais ça n'a rien à voir avec le mode d'ouverture du fichier (qui ne change presque rien d'ailleur à ce que tu mets dans le fichier). Par contre, tu peut même ouvrir ton fichier avec "w" et non pas "w+", mais ce n'est pas important (juste parce que tu ne fait qu'ajouter des données à la fin de ton texte qui est initialement vide).

Shiba_the_Inu
Shiba_the_Inu
Niveau 85
02 janvier 2009 à 19:47:36

Ah merci beaucoup, c'est exactement ce que je voulais :)
En fait pour la touche backspace j'ai mis du temps à comprendre mais j'ai fait un mix avec ce que tu m'as dit donc :

case SDLK_BACKSPACE:
if(carAct >0){nomCarte[carAct-1] = ' ';carAct -=1;}

et j'ai viré le
case SDLK_BACKSPACE || SDLK_CLEAR
et finalement j'ai initialisé le tableau avec ' ', ça marche aussi bien.

pour laisser juste le backspace, sinon ça merdait...
Mais là c'est impec, en plus ça nettoie un peu mon code (je trouvais un peu lourd toutes les variables :s) Tout marche comme je le voulais donc merci bien à toi :) (que cette nouvelle année t'apporte prospérité pour m'avoir aidé :-p )

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware