Problème programme C

MartinLabrosse Messages postés 237 Date d'inscription   Statut Membre Dernière intervention   -  
MartinLabrosse Messages postés 237 Date d'inscription   Statut Membre Dernière intervention   -
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

miramaze Messages postés 1429 Date d'inscription   Statut Contributeur Dernière intervention   92
 
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).
0
MartinLabrosse Messages postés 237 Date d'inscription   Statut Membre Dernière intervention   29
 
C'est là que j'apprend mais ça résout pas mon problème. Qui peut corriger mon code svp ?
0
miramaze Messages postés 1429 Date d'inscription   Statut Contributeur Dernière intervention   92
 
Tiens,
#include <stdio.h>

int main()
{
	char nom[20];
	
	printf("Ton nom ?\n");
	scanf("%s", nom);
	
	printf("Tu t'appelles %s", nom);
	
	return 0;
} 
0
miramaze Messages postés 1429 Date d'inscription   Statut Contributeur Dernière intervention   92
 
Je sais pas comment le compilateur a pû compiler ton code.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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.
0
miramaze Messages postés 1429 Date d'inscription   Statut Contributeur Dernière intervention   92
 
C'est exact j'avais lu en diagonal le message d'erreur ;-) , je me demandais aussi ... . Merci pour la correction.
0
MartinLabrosse Messages postés 237 Date d'inscription   Statut Membre Dernière intervention   29
 
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...
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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,
0
MartinLabrosse Messages postés 237 Date d'inscription   Statut Membre Dernière intervention   29
 
Ca marche mais c'est un peu compliqué, j'suis carrément débutant moi...
Y'a pas plus simple avec scanf ?
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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,
0
MartinLabrosse Messages postés 237 Date d'inscription   Statut Membre Dernière intervention   29
 
Merci, c'est exactement ça que je cherchais !!!!
Je vous remercie et place ce sujet en Résolut.
0
MartinLabrosse Messages postés 237 Date d'inscription   Statut Membre Dernière intervention   29
 
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;
}
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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,
0
MartinLabrosse Messages postés 237 Date d'inscription   Statut Membre Dernière intervention   29
 
Eh donc, ça doit comment je peux corriger mon code stp.
Je suis un vrai débutant... ^^
0
MartinLabrosse Messages postés 237 Date d'inscription   Statut Membre Dernière intervention   29
 
Eh donc, ça doit comment je peux corriger mon code stp.
Je suis un vrai débutant... ^^
0
miramaze Messages postés 1429 Date d'inscription   Statut Contributeur Dernière intervention   92
 
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.
0