2016-09-16 1 views
0

Je suis très nouveau en programmation, j'apprends le C++ et je suis tombé sur un programme que je pensais essayer d'une certaine manière, avec de multiples fonctions pour que je puisse comprendre et m'entrainer davantage.Comment se fait-il que l'identificateur ne soit pas trouvé? Quelqu'un pourrait-il expliquer?

Le programme en supposant de prendre la moyenne de 5 chiffres, c'est la tâche, je sais qu'il y a un moyen plus simple mais je veux m'entraîner à faire des variables de fonction et de passage. Le professeur a également recommandé que je le fais de cette façon pour un crédit supplémentaire.

voici ce que j'ai.

#include<iostream> 
#include<string> 

using namespace std; 

float num1, num2, num3, num4, num5; 

float main() { 

    cout << "Basic Average Calculator" << endl; 
    cout << "Plaese Input your list of 5 numbers Please place a space after EACH number: " << endl; 
    cin >> num1 >> num2 >> num3 >> num4 >> num5; 
    cout << "Your Average is: " << average(num1, num2, num3, num4, num5); 
    return 0; 
} 

float average(float a, float b, float c, float d, float e) { 
    a = num1, num2 = b, num3 = c, num4 = d, num5 = e; 

    float total = (a + b + c + d + e)/5; 

    return total; 
} 

Ce code ne fonctionne pas, et je ne sais pas pourquoi être que quand je tapée je suis pas d'erreurs de syntaxe sur Visual Studios, je sens la logique est correcte?

Je reçois une erreur "Identificateur non trouvé" sur la fonction average() ??

Pourrait quelqu'un avec expérience s'il vous plaît aidez-moi ??

+1

Votre compilateur vous indique * qui * identifiant est introuvable. Tout ce que vous avez à faire est de réparer cela. Aussi 'main()' devrait retourner 'int', pas' float'. – Barry

+0

C'était la fonction average() cependant, je ne sais pas comment l'identifier correctement? –

+2

Vous devez déclarer les identifiants avant de les utiliser –

Répondre

2

Compilation monopasse: les identificateurs doivent être déclarés avant d'être utilisés.

void f() { g(); } 
void g() {} 

est illégale. Vous pouvez résoudre ce problème avec une déclaration avant:

void g(); // note the ; 

void f() { g(); } // legal 
void g() {} 

Dans votre cas, passez à average avant main ou ajouter

float average(float a, float b, float c, float d, float e); 

quelque part main.

--- --- Modifier

Cette ligne de code semble fishy:

a = num1, num2 = b, num3 = c, num4 = d, num5 = e; 
              ^^^^^^^^ 

À supposer que c'est censé être

a = num1, num2 = b, num3 = c, num4 = d, e = num5; 

alors il semble y avoir aucune raison de avoir cette fonction prendre des arguments en premier lieu.

Vous pouvez changer votre code pour être:

float average() 
{ 
    return (num1 + num2 + num3 + num4 + num5)/5; 
} 

int main() 
{ 
    ... 
    cout << "Your Average is: " << average(); 
    ... 
} 

ou

float average(float a, float b, float c, float d, float e) 
{ 
    return (a + b + c + d + e)/5; 
} 

int main() 
{ 
    ... 
    cout << "Your Average is: " << average(num1, num2, num3, num4, num5); 
    ... 
} 
+0

Wow !! Merci beaucoup! Cela a fonctionné, merci pour la clarification. J'ai écrit d'autres programmes où les fonctions viendraient après le main(), et ils ont encore travaillé?Est-ce un cas particulier? –

+0

@VictorMartins peut-être qu'ils étaient des programmes C89, et/ou causé un comportement indéfini qui est passé inaperçu –

+0

@VictorMartins Pas un cas particulier, peut-être que vous compiliez avec des options non standard. Aussi, voir mon édition avec quelques notes supplémentaires sur le code. – kfsone