Problème programme C

Bonjour tout le monde, je suis débutant dans la programmation et je voulais crée un p'tit programme en console qui demande le nom puis après tu tapes le nom et il te dit...
"Tu t'appelle". Puis le nom tapé... Mais y donne le nombre 0... Voici ma source:
#include <stdio.h>
#include <stdlib.h>

int main()
{
char nom = 0;
printf("Ton nom ?\n");
scanf("%d", &nom);
printf("Tu t'appelles %d", nom);
return 0;
}

Please, help me !

13 réponses

  1. Contributeur
    Salut,
    je t'invite à aller lire cet article : http://www.siteduzero.com/tutoriel-3-35363-realiser-des-saisies-securisees-grace-a-fgets.html ,qui répondra à tes questions sur la saisie en C (même celle que tu ne te poses pas encore).
    1. C'est là que j'apprend mais ça résout pas mon problème. Qui peut corriger mon code svp ?
      1. Contributeur
        Tiens,
        #include <stdio.h>
        
        int main()
        {
        	char nom[20];
        	
        	printf("Ton nom ?\n");
        	scanf("%s", nom);
        	
        	printf("Tu t'appelles %s", nom);
        	
        	return 0;
        } 
        
        1. Contributeur
          Je sais pas comment le compilateur a pû compiler ton code.
          1. Contributeur
            Je sais pas comment le compilateur a pû compiler ton code.
            Car son premier programme ne contient pas d'erreurs, juste un warning dû au cast non implicite du int vers le char.
            1. Contributeur
              C'est exact j'avais lu en diagonal le message d'erreur ;-) , je me demandais aussi ... . Merci pour la correction.
              1. Salut...
                Tout d'abord merci pour votre aide mais le code marche pas tout à fait, en fait si je tape Martin... Ca marche mais dès que je met un espace, ben il m'affiche pas après l'espace... Please... Help me...
                1. Contributeur
                  Ca marche mais dès que je met un espace, ben il m'affiche pas après l'espace.
                  C'est tout à fait normal. C'est le comportement par défaut du scanf avec le format %s.
                  Si tu souhaites récupérer au-delà de l'espace, je te conseille d'utiliser la fonction fgets dont voici un exemple :

                  #include <stdio.h>
                  #include <stdlib.h>
                  #include <string.h>
                  
                  static void traiteChaine(char const *chaine) {
                      char *p=strchr(chaine, '\n');
                      if (p == NULL) {
                          int c;
                          while ((c=getchar()) != '\n' && c != EOF);
                      }
                      else
                          *p=0;
                  }
                  
                  int main(void) {
                      char chaine[256];
                  
                      printf("entre ta phrase (max %u caractères) : ", sizeof chaine - 1);
                      if (fgets(chaine, sizeof chaine, stdin) == NULL) {
                          fputs("erreur de saisie\n",stderr);
                          return EXIT_FAILURE;
                      }
                  
                      traiteChaine(chaine);
                      printf("tu as entré la chaîne : %s\n", chaine);
                  
                      return 0;
                  }
                  


                  Si tu as des questions sur la compréhension du code, n'hésite pas.

                  Cdlt,
                  1. Ca marche mais c'est un peu compliqué, j'suis carrément débutant moi...
                    Y'a pas plus simple avec scanf ?
                    1. Contributeur
                      Je t'ai gardé que le fonctionnel dans mon programme. Il se simplifie donc très nettement. Ce qui le rendait "compliqué" c'est tous les opérations de contrôles. Pourtant elles sont indispensables.
                      Voici donc le code simplifié :
                      #include <stdio.h>
                      
                      int main(void) {
                          char chaine[256];
                          printf("entre ta chaîne :\n");
                          fgets(chaine, sizeof chaine, stdin);
                          printf("tu as entré la chaîne : %s\n", chaine);
                      
                          return 0;
                      }
                      

                      Si tu souhaites avec un scanf :
                      #include <stdio.h>
                      
                      int main(void) {
                          char chaine[256];
                          printf("entre ta chaîne :\n");
                          scanf("%[^\n]",chaine);
                          printf("tu as entré la chaîne : %s\n", chaine);
                      
                          return 0;
                      }
                      


                      Cdlt,
                      1. Merci, c'est exactement ça que je cherchais !!!!
                        Je vous remercie et place ce sujet en Résolut.
                        1. Salut, dsl mais j'ai essayé de faire une condition et ça marche pas...
                          Tu peux m'aider stp ?
                          #include <stdio.h>
                          #include <stdlib.h>
                          int main()
                          {
                          char nom [256];
                          printf("Nom ?:\n");
                          scanf("%[^\n]", nom);
                          if (nom = "Martin")
                          {
                          printf("Martin !!!");
                          }
                          else
                          {
                          printf("Qui t'es ?");
                          }
                          return 0;
                          }
                          1. Contributeur
                            En C, pour comparer ce n'est pas l'opérateur = mais l'opérateur == (double égal).
                            Mais faire nom == "Martin" n'a aucun sens car tu vas comparer les adresses des pointeurs et non les valeurs des tableaux.
                            Pour comparer deux chaînes de caractères, il te faut utiliser la fonction strcmp.
                            http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man3/strcmp.3.html

                            Cdlt,
                          2. Eh donc, ça doit comment je peux corriger mon code stp.
                            Je suis un vrai débutant... ^^
                          3. Eh donc, ça doit comment je peux corriger mon code stp.
                            Je suis un vrai débutant... ^^
                        2. Contributeur
                          C'est d'ailleurs pour ça que je t'avais mis la page si tu l'avais lu... Ils expliquent tout ces problèmes de saisie, je n'ai fais que corriger à la va-vite.