2015-10-28 3 views
1

quoi de mal avec mon code? Im essayant de renvoyer une valeur de la fonction ignition_status, son non retournant. Je ne vois pas de problème dans mon code.La fonction C ne renvoie pas la valeur

#include<stdio.h> 
#include<stdint.h> 
const char * ignition_status(); 
const char *ign_st; 
int main() 
{ 
printf("%s", ignition_status(1)); 
return 0; 
} 
const char * ignition_status(int st) 
{ 
    if(st==1) 
     { 
      const char *ign_st="ON"; 
     } 
    else 
     { 
      const char *ign_st="OFF"; 
     } 
    return ign_st; 
} 

Merci ...

+1

Votre # 'include' ne devrait-il pas avoir un nom de fichier? – Dmitri

+2

'const char * ign_st' dans les blocs' if/else'. Cela déclare une nouvelle variable *. Qui n'existe que dans les blocs 'if/else'. Ce que vous retournez est alors le 'ign_st' global qui n'a jamais été défini. Supprimez ces 'const char *' ou déclarez-le comme une variable locale en dehors du bloc 'if/else'. Si vous faites ce dernier, mieux vaut utiliser un nom de variable différent pour ne pas le confondre avec la définition globale. – kaylum

+0

Je suis sûr que votre code ne compile pas, non seulement ne pas retourner ce que vous attendez. Est-ce correct? – Lucio

Répondre

3

Les commentaires sont pointant vers la bonne direction, voici un échantillon de travail:

#include <stdio.h> 

const char * ignition_status(int st) 
{ 
    const char *ign_st; 

    if(st==1) { 
     ign_st="ON"; 
    } else { 
     ign_st="OFF"; 
    } 

    return ign_st; 
} 

int main() 
{ 
    printf("%s", ignition_status(1)); 

    return 0; 
} 
2

Il suffit de retirer const char * devant ign_st dans if/else déclaration:

#include<stdio.h> 
#include<stdint.h> 
const char * ignition_status(); 
const char *ign_st; 

int main() { 
    printf("%s", ignition_status(1)); 
    return 0; 
} 

const char * ignition_status(int st) { 
    if(st==1) { 
    ign_st="ON"; 
    } else { 
    ign_st="OFF"; 
    } 

    return ign_st; 
} 
+0

vous êtes les bienvenus à tout moment;) –

+0

@kaylum ce n'est pas une faute de frappe cela fonctionne –

+0

vous avez raison réponse mise à jour :) –