Partage
  • Partager sur Facebook
  • Partager sur Twitter

sprintf et chaînes de caractères

    20 septembre 2017 à 14:59:26

    Bonjour,

    Dans un de mes codes je fait un scanf pour que l'utilisateur rentre une lettre. Cette lettre est contenu dans letter de type char.

    Sauf que j'ai besoin de réutiliser letter pour le même usage par la suite. Ainsi je doit stocker la lettre dans letters (avec un "s") qui est une chaîne de 100 cases, simplement pour pouvoir réinitialisé le contenu de letter (sans "s") 

    Je veux donc utiliser la fonction sprintf() pour pouvoir écrire dans letters ce qui est contenu dans letter.

    C'est là que ça coince

    char letter, letters[10], word[] = "RED";
    int nbr_sucess = 0, nbr_letter = 3;
    
    printf("Choisissez une lettre : ");
    scanf("%d", &letter);
    sprintf(letters, "%d", letter);
    printf("%d", letters);

    J'ai essayé en ne mettant pas de de crochet à letter, puis à letters, puis aux deux mais à ce moment là mon interpréteur fait la gueule.

    J'ai rajouté un print pour voir le résultat mais là mon programme crash. J'ai essayé de d'inverser %d par %s sans rien changer.

    Bref là je ne sais plus quoi faire ni si il est possible d'écrire dans une chaîne via une variable. S'il vous plait, aidez moi 

    • Partager sur Facebook
    • Partager sur Twitter
      20 septembre 2017 à 16:06:22

      Tes descripteurs de format ne sont pas bon aussi bien pour scanf que pour printf et sprintf !

      pour un char c'est %c

      Pour une chaine de caractère c'est %s

      • Partager sur Facebook
      • Partager sur Twitter
        20 septembre 2017 à 16:17:28

        #include <stdio.h>
        
        int		main(void)
        {
        	char	letter; // Pour un char on utilisera le format %c
        	char	tab[10];
        
        	printf("Entrez une lettre : ");
        	scanf("%c", &letter);
        
        	/* On inscrit la valeur de letter dans tab, valeur interprétée en tant que char (format %c).
        		Mettre un char dans un tableau de char, ça ne prend donc qu'une seule case du tableau,
        		on sait donc que letter sera copiée dans la première case tab[0]. */
        	sprintf(tab, "%c", letter); 
        	printf("letter = %c et tab[0] = %c\n", letter, tab[0]);
        	
        	/* On peut utiliser le format %s pour afficher tab, car sprintf() a ajouté le '\0'
        	nécessaire à la validité de la chaîne */
        	printf("tab = %s\n", tab);
        
        	return (0);
        }
        • Partager sur Facebook
        • Partager sur Twitter
          20 septembre 2017 à 17:46:10

          super merci ça résout le problème

          Mais en fait... pas vraiment.

          En fait, au début je demande à mon programme de faitre un premier scanf(). Pour des raisons obscure, ça empêche de faire un deuxième scanf() dans une autre fonction.

          #include <stdio.h>
          #include <stdlib.h>
          
          int main(int argc, char *argv[])
          {
              char smth;
          
              printf("entrez ce que vous voulez, cela n'a pas d'importance : ");
              //scanf("%c", &smth);
              fonction();
          
              return 0;
          }
          
          
          int fonction()
          {
              char letter;
              char tab[10];
          
              printf("\nEntrez une lettre : ");
              scanf("%c", &letter);
              sprintf(tab, "%c", letter);
              printf("%c", tab[0]);
          }

          Quand on retire la ligne du premier scanf() ça marche mais si on la laisse, seul le premier est utilisable...

          -
          Edité par Aifais 20 septembre 2017 à 17:48:10

          • Partager sur Facebook
          • Partager sur Twitter
            20 septembre 2017 à 18:46:18

            C'est parce que la touche ENTREE du clavier envoie le caractère '\n' au buffer ... c'est un sujet un peu compliqué, mais énormément traité sur internet. Je t'encourage à faire des recherches, car je ne suis pas convaincu que te donner une solution temporaire et propre à ton petit code soit une véritable solution.
            • Partager sur Facebook
            • Partager sur Twitter
              20 septembre 2017 à 19:04:03

              C'est qu'il reste des caractères dans le buffer d'entrée, pour les manger tu peux utiliser ce code :

                  int c = 0;
                  while (c != '\n' && c != EOF) c=getchar();

              Ta fonction "fonction" n'est pas déclarée.

              Sa signature renvoi un entier (int) alors qu'elle ne renvoi rien. 

              • Partager sur Facebook
              • Partager sur Twitter

              sprintf et chaînes de caractères

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown