2010-11-21 5 views
1

J'apprends C et je fais l'exercice du chapitre de fonction. J'ai donc écrit un petit programme avec 3 fichiers et deux petites fonctions. Sincèrement, ça ne marche pas. Je n'ai pas d'erreur, les fonctions ne sont tout simplement pas exécutées et je ne sais pas pourquoi.Programmation avec des fonctions utilisant C. Les fonctions ne sont pas exécutées

Tout d'abord, ceci est mon fichier d'en-tête qui ne déclare que mes fonctions.

//employee.h 
int addEmployee(void); 
int printEmployee(int i); 

Donc le fichier suivant est pour la définition des fonctions.

//employee.c 
#include "employee.h" 
#include <stdio.h> 
#include <ctype.h> 

int numE; 
int i; 

int addEmployee(void) 
{ 
    printf("Please type in the number of your employees: "); 
    scanf_s("%d", &numE); 
    i = numE; 
    return i; 
} 

int printEmployee(int i) 
{ 
    printf("%d", i); 
    getchar(); 
    getchar(); 
    return i; 
} 

Et le dernier fichier est utilisé pour exécuter les fonctions.

//lab6.c 
#include "employee.h" 
#include <stdio.h> 
#include <ctype.h> 


int main() 
{ 
    int addEmployee(); 
    int printEmployee(); 
    return 0; 
} 
+0

Qu'obtenez-vous en sortie? –

Répondre

4

En utilisant

int main() 
{ 
    int addEmployee(); 
    int printEmployee(); 
    return 0; 
} 

vous déclarer essentiellement 2 nouvelles fonctions avec 0 arguments.

Vous n'appelez pas vos "anciennes" fonctions.

Cela devrait fonctionner, comme d'autres l'ont souligné:

int main() 
{ 
    int emp = addEmployee(); 
    printEmployee(emp); 
    return 0; 
} 

Parce que vous appelez addEmployee(), le stockage, il est le résultat de l'impression emp puis emp en utilisant printEmployee. Depuis printEmployee est déclaré avec un paramètre, vous venez de mettre emp et cela fonctionnera.

+0

Merci beaucoup. Maintenant, ça fonctionne correctement. – Ordo

2

vous voulez:

int main() 
{ 
    addEmployee(); 
    printEmployee(1); 

    return 0; 
} 
+0

Je n'ai pas remarqué qu'il avait int avant l'appel de fonction. Quel est l'effet d'avoir de telles instructions dans main, c'est "int addEmployee();" –

+0

Merci, mais maintenant je reçois une erreur. "La fonction n'accepte pas les arguments zéro". J'ai tapé "int i" mais ça ne marche pas aussi. Je veux que la fonction obtienne la valeur i de l'autre fonction addEmployee. – Ordo

+3

En fait, il semble re-déclarer les fonctions, ne définissant pas deux pointeurs de fonction: 'int main() {int func(); func(); } void func() {} 'fonctionne, par exemple. – meagar

1

Modifier ceci:

int main() 
{ 
    int addEmployee(); 
    int printEmployee(); 
    return 0; 
} 

à ceci:

int main() 
{ 
    addEmployee(); 
    printEmployee(); 
    return 0; 
} 

Vous re-déclarer les fonctions au lieu de les appeler .

Vous devrez également modifier votre fonction printEmployee pour ne pas accepter un argument entier; il semble qu'il devrait juste utiliser la même variable globale que addEmployee. C'est une mauvaise idée cependant; les variables globales sont généralement à éviter. addEmployee devrait probablement retourner l'ID de l'employé, que vous pourriez stocker, puis passer en printEmployee.

3

Lorsque vous appelez une fonction, vous ne placez pas le type de retour devant l'appel. L'appel est simplement le nom de la fonction et tous les paramètres que vous appelez avec. Ainsi, votre fonction principale devrait ressembler à ceci:

int main() { 
    addEmployee(); 
    printEmployee(1); 

    return 0; 
} 

EDIT: Donc, dans votre fichier employee.c, vous essayez d'utiliser addEmployee() de prendre un certain nombre d'employés de la ligne de commande et le stocker dans la variable i droit? Et vous voulez printEmployee() pour vous dire combien d'employés ont été inscrits? Voici comment vous feriez cela.

//employee.c 
#include "employee.h" 
#include <stdio.h> 
#include <ctype.h> 

int i; 

int addEmployee(void) 
{ 
    int numE; 
    printf("Please type in the number of your employees: "); 
    scanf_s("%d", &numE); 
    i = numE; 
} 

int printEmployee() 
{ 
    printf("%d", i); 
    getchar(); 
    getchar(); 
} 

Voici ce que j'ai fait.

D'abord, j'ai fait numE une variable locale à la fonction addEmployee qui l'utilise. Généralement, vous devriez garder une portée variable aussi petite que possible. Cela signifie les garder au niveau le plus bas, ils sont utilisés. Dans ce cas, numE n'est requis que par addEmployee(), ce qui en fait la portée. Deuxièmement, j'ai supprimé le paramètre int printEmployee(int i). Il remplaçait votre variable i au niveau du fichier. Donc, vous étiez en train de stocker le numéro lu dans numE en i mais lorsque vous avez entré printEmployee(), vous étiez en train de créer un nouveau i vide qui l'a caché. Lorsque vous avez appelé printEmployee(1) à partir de principal, vous passiez la valeur 1 dans i dans printEmployee(int i).En supprimant le paramètre, vous arrêtez de masquer employee.ci.

Enfin, j'ai supprimé les retours. Une fonction n'a rien à retourner en C. Et si vous n'utilisez pas le retour, c'est juste une ligne de code supplémentaire pour l'inclure.

Il y a encore une modification que vous devrez faire pour que cela fonctionne, dans votre fichier lab6.c. Supprimez le paramètre de l'appel à printEmployee()

//lab6.c 
#include "employee.h" 
#include <stdio.h> 
#include <ctype.h> 


int main() 
{ 
    addEmployee(); 
    printEmployee(); 
    return 0; 
} 

devrait fonctionner de la façon dont vous attendez maintenant.

+0

Merci, mais la sortie est toujours 1 peu importe ce que je tape en nombre d'employés. – Ordo

+1

Oh, je vois ce que vous faites. Donne-moi une seconde, ça va demander un peu de frappe. –

Questions connexes