IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

printf retour <Null>


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Septembre 2011
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Septembre 2011
    Messages : 56
    Par défaut printf retour <Null>
    Bonjour,

    Petite question, je ne comprends pas le retour de mon code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    int main()
    {
     
    char statut, continuer[] = "O";
    char texteStatutPrint;
     
     
            	printf("\n C : Celibataire\n M : Marie\n S : Separe\n V : Veuf"
    			       "\n\n Veuillez saisir votre statut matrimonial :");
    			scanf("%c",&statut);
     
    			switch (statut)
    			{
    			case 'C' : 
    				{char texteStatutPrint[] = "Celibataire";break;}	
    			case 'M' : 
    				{char texteStatutPrint[] = "Marie";break;}
    			case 'S' : 
    				{char texteStatutPrint[] = "Separe";break;}
    			case 'V' : 
    				{char texteStatutPrint[] = "Veuf";break;}	
    			default :	
    			    {char texteStatutPrint[] = "Indetermine";}			
    			}
     
    	printf("\n %s  :",texteStatutPrint);
     
    }
    Le code m'affiche <Null>.

    Savez vous pourquoi ? Sachant que je n souhaites pas intégrer le printf au sein du Switch.

    Merci beaucoup

  2. #2
    Membre Expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Par défaut
    Bonsoir,

    pense aux balises code : c'est plus lisible.

    Qu'il t'affiche null est un simple fait du hasard, ça aurait pu être bien pire.
    Tu déclares textStatutPrint comme un char et tu essayes de l'imprimer comme une string ...
    De plus, tu redéfinis textStatutPrint dans chaque case, cette redéfinition a une portée limitée au bloc du case et ne sera pas visible en dehors.

  3. #3
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Il y a au moins deux choses qui ne vont pas bien dans ton code :

    1. Juste avant le premier printf, tu déclares une variable de type char appelée texteStatutPrint.
    2. Dans chaque case de ton switch tu déclares une variable de même nom mais de type tableau de char.

    Déjà par principe ce n'est pas bien d'avoir différentes variables de même nom.

    Mais il faut également savoir qu'en C, une variable déclarée dans un bloc, c'est-à-dire dans une région délimitée par un { et un }, n'est visible qu'à l'intérieur de ce bloc. Ton dernier printf ne connait donc pas ces texteStatutPrint que tu as déclarées à différents endroits de ton switch. La seule variable texteStatutPrint connue à cette ligne est celle qui a été définie tout au début de la fonction main, puisqu'on est encore dans le bloc où elle a été introduite. Comme cette variable est de type char, tu n'es pas censé l'afficher dans le format %s. En plus jusque là elle n'a même pas été initialisée. Tu peux donc être content que ton programme affiche <null> au lieu de planter.

    Une solution facile à comprendre dans ta situation serait de déclarer texteStatutPrint avec char texteStatutPrint[50]; au début de la fonction main. C'est-à-dire que l'on crée un tableau pouvant contenir au plus 50 caractères, '\0' final inclus. Ensuite dans chaque case de ton switch, utilise strcpy(texteStatutPrint, "Le statut"); pour le remplir de caractères. Et rien d'autre.

    Avec ces changements, ton programme ira déjà beaucoup mieux.

  4. #4
    Membre averti
    Inscrit en
    Septembre 2011
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Septembre 2011
    Messages : 56
    Par défaut merci
    Merci beaucoup!

    Tout roule ... compréhension pour les débutants

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AJAX] Retour "$.ajax" null avec REST
    Par legentil dans le forum jQuery
    Réponses: 3
    Dernier message: 03/03/2014, 16h47
  2. Réponses: 3
    Dernier message: 11/08/2011, 09h39
  3. Commande printf retour à la ligne non voulu
    Par Rithy666 dans le forum Programmation et administration système
    Réponses: 3
    Dernier message: 05/11/2010, 16h28
  4. Retour malloc NULL avec mémoire vive dispo
    Par Babcool dans le forum Débuter
    Réponses: 9
    Dernier message: 07/09/2010, 23h01
  5. [JDBC] retour de requete sql avec valeur NULL
    Par maxxou dans le forum JDBC
    Réponses: 3
    Dernier message: 13/09/2004, 14h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo