Loop Compile Error For

3

I'm doing a program that asks how many notes the user will type and then enters a 'for' loop asking what the notes are to type. The notes are stored in an array and finally the average is calculated.

#include <iostream>
using namespace std;

int main(){

int qt, tot, med;
cout << "Quantidade de notas: ";
cin >> qt;

int nt[] = {};

for(i = 0; i <= qt; i++){
    cout << "Digite a nota " << i+1 << " : " << endl;
    cin >> nt[i];
    tot = tot + nt[i];
}

med = (tot / qt);

cout << "Media = " << med << endl;

return main();
}

The problem is that whenever I try to compile, the following error appears:

 'i' was not declared in this scope
  for(i = 0; i <= qt; i++){
    
asked by anonymous 14.12.2017 / 00:15

2 answers

2

You have several errors in the code, when you solve this will appear others. Let's get at least a part of it:

#include <iostream>
using namespace std;

int main() {
    cout << "Quantidade de notas: ";
    int qt;
    cin >> qt;
    int nt[qt] = {}; //isto é mais C que C++
    int tot = 0;
    for (int i = 0; i < qt; i++) {
        cout << "Digite a nota " << i + 1 << " : " << endl;
        cin >> nt[i];
        tot += nt[i];
    }
    cout << "Media = " << tot / qt << endl;
}

See working at ideone . And no Coding Ground . Also I placed GitHub for future reference .

The array was not sized and would corrupt memory.

The iteration variable of for was not declared, as the compiler reported.

The counter ran into a position after the size entered.

You can not call the same function without an output condition and it is not too long to give stackoverflow .

You might want averages with a decimal part, this code does not allow this.

The rest is more cosmetic.

    
14.12.2017 / 00:20
0

Come on Nate, regarding the referenced error:

'i' was not declared in this scope
for(i = 0; i <= qt; i++){ ...}

What was missing was to put even the type of the variable i, because in this context it has to be declared as a variable, and it will be used as control of the for loop. It looks like this:

for(int i = 0; i <= qt; i++){ ...}

I found it funny that I developed a code a few days ago to do the same operation, just as you thought. Calculate the arithmetic mean of a certain amount of notes reported by the user.

I've implemented my solution using class, objects, dynamic arrays and I find it interesting to leave it to you here, to study it and analyze it. Follow below:

#include <iostream>

using namespace std;

class Calculadora{

private:
    double resultado;
    int qtdNotas;
    double *nota = new double;
public:
    //Setters
    void setResultado(double resultado){
        this->resultado = resultado;
    }
    void setQtdNotas(int qtdNotas){
        this->qtdNotas = qtdNotas;
    }
    void setNota(double *nota){
        for(int i=0; i <= getQtdNotasArray(); i++){
            *(this->nota + i) = *(nota + i);
        }
    }
    //Getters
    double getResultado(){
        return this->resultado;
    }
    int getQtdNotasArray(){
        return this->qtdNotas - 1;
    }
    int getQtdNotas(){
        return this->qtdNotas;
    }

    //Média
    double calculaMedia(){
        double resultado = 0;
        int i = 0;
        int qtdNotas = this->getQtdNotas();

       while(i <= this->getQtdNotasArray()){
            resultado += *(this->nota + i);
            i++;
        }

        resultado = resultado / (double)qtdNotas;

        return this->resultado = resultado;
    }
};


int main()
{
    int qtdNotas; //Recebe quantidade de notas informadas pelo usuário, a média é baseada nessa quantidade
    double *nota = new double; //Declaração de variável ponteiro, utilizada para posterior criação do array dinâmico

    Calculadora *o = new Calculadora; //Cria o objeto "o" e utiliza e o utiliza para reservar espaço na memória

    cout << "Programa Media de um Aluno. Abaixo serao solicitadas as notas dos 4 bimentres para ser calculada a media final.\n";
    cout << "A media do aluno sera baseada em quantas notas? ";
    cin >> qtdNotas; cout << endl;

    o->setQtdNotas(qtdNotas); //Insere quantidade de notas sobre qual o calculo será feito

    for(int i=0; i <= o->getQtdNotasArray(); i++){
        cout << i + 1 << " : ";
        cin >> *(nota + i); cout << endl; //Guarda na variável ponteiro, em seu devido espaço(array), os valores das medias inseridas pelo usuário
    }

    o->setNota(nota); //pega referência do ponteiro onde foram alocadas as notas e passa pela função para ser atribuída a um atributo dentro da classe
    o->calculaMedia(); //com todos os dados já inseridos nos atributos do objeto, este método somente manda executar o calculo da média aritmética simples, e manda guardar o resultado em um atributo de nome resultado para somente ser recuperado posteriormente

    cout << "Notas recolhidas com sucesso! A media para este aluno e de: " << o->getResultado(); //Método que somente recupera o resultado dos calculos já realizados anteriormente

    return 0;
}

I'm running my programs in IDE Code :: Blocks, using gcc compiler and standard C ++ 11 ISO. Here is my contribution, in fact I'm starting in C ++ so any serious technical error is willing to report.

    
03.01.2018 / 03:57