Problème programme C

Fermé
MartinLabrosse Messages postés 237 Date d'inscription jeudi 12 février 2009 Statut Membre Dernière intervention 19 janvier 2021 - 2 avril 2010 à 17:41
MartinLabrosse Messages postés 237 Date d'inscription jeudi 12 février 2009 Statut Membre Dernière intervention 19 janvier 2021 - 6 avril 2010 à 16:07
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 mercredi 29 juillet 2009 Statut Contributeur Dernière intervention 1 mai 2022 92
2 avril 2010 à 18:04
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 jeudi 12 février 2009 Statut Membre Dernière intervention 19 janvier 2021 29
2 avril 2010 à 21:00
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 mercredi 29 juillet 2009 Statut Contributeur Dernière intervention 1 mai 2022 92
2 avril 2010 à 21:06
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 mercredi 29 juillet 2009 Statut Contributeur Dernière intervention 1 mai 2022 92
Modifié par miramaze le 2/04/2010 à 21:10
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 836
2 avril 2010 à 22:04
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 mercredi 29 juillet 2009 Statut Contributeur Dernière intervention 1 mai 2022 92
2 avril 2010 à 22:11
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 jeudi 12 février 2009 Statut Membre Dernière intervention 19 janvier 2021 29
3 avril 2010 à 12:38
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 836
3 avril 2010 à 14:48
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 jeudi 12 février 2009 Statut Membre Dernière intervention 19 janvier 2021 29
3 avril 2010 à 15:06
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 836
3 avril 2010 à 15:15
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 jeudi 12 février 2009 Statut Membre Dernière intervention 19 janvier 2021 29
3 avril 2010 à 16:08
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 jeudi 12 février 2009 Statut Membre Dernière intervention 19 janvier 2021 29
3 avril 2010 à 17:03
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 836
3 avril 2010 à 17:41
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 jeudi 12 février 2009 Statut Membre Dernière intervention 19 janvier 2021 29
6 avril 2010 à 16:07
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 jeudi 12 février 2009 Statut Membre Dernière intervention 19 janvier 2021 29
6 avril 2010 à 16:07
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 mercredi 29 juillet 2009 Statut Contributeur Dernière intervention 1 mai 2022 92
Modifié par miramaze le 4/04/2010 à 16:10
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