Программа на С ++ выдает ошибку "значение 'i' не инициировано" - PullRequest
3 голосов
/ 17 декабря 2011

этот код выдает ошибку "я" не инициирован, кто-нибудь может помочь?программа соответствует легко.и во время работы каждый коммутатор работает, но используется 2.

#include<iostream>
using namespace std;

const int m=50;
class ITEMS
{
    int itemCode[m];
    float itemPrice[m];
    int count;
public:
    void CNT(void)
    {
        count=0;
    }
    void getItem(void);
    void displaySum(void);
    void remove(void);
    void displayItems(void);
};

функций.

void ITEMS :: getItem (void)
{
    cout<<"entr itm cod";
    cin>> itemCode[count];
    cout<<"entr itm cost";
    cin>> itemPrice[count];
    count++;
}

проблема здесь.эта функция "displaySum (void)" должна выдавать результат путем суммирования цен всех элементов

void ITEMS ::displaySum (void)
{
    float sum =0;
    for (int i; i<count;i++)
        sum+=itemPrice[i];
    cout<<"\n total value"<< sum<<endl;
}
void ITEMS ::remove (void)
{
    int a;
    cout<< "entr itm cod";
    cin>> a;
for(int i=0; i<count;i++)
    if (itemCode[i] == a)
        itemPrice[i]=0;
}
void ITEMS :: displayItems(void)
{
    cout<< "\n Code price\n";
    for(int i=0;i<count;i++)
    {
        cout<<"\n" << itemCode[i];
        cout<<"  " << itemPrice[i];
    }
    cout<< endl;
}

основная функция.это здесь я назвал все вышеперечисленные функции.используя основную функцию.

int main()
{
    ITEMS order;
    order.CNT();
    int x;
    do
    {
        cout<< "select any opt"
            <<"\n 1. add"
            <<"\n 2. display total valu"
            <<"\n 3. delete an item"
            <<"\n 4. display all"
            <<"\n 5. quit?
            <<"\n number ?";
        cin>> x;

        switch(x)
        {
        case 1: order.getItem(); break;
        case 2: order.displaySum(); break;
        case 3: order.remove(); break;
        case 4: order.displayItems(); break;
        case 5: break;
        default: cout<< "try again";
        }
    }while(x!=5);
    return 0;
}

Ответы [ 3 ]

5 голосов
/ 17 декабря 2011

В displaySum у вас есть:

for (int i; i<count;i++)
    sum+=itemPrice[i];

i здесь не инициализируется. Это, вероятно, не то, что вы хотите.

Также убедитесь, что вы обращаете внимание на то, что говорит вам ваш компилятор. Например, если вы используете gcc, вы можете использовать опции "-Wall -Werror", которые генерируют предупреждения об общих ошибках программирования и сообщают о них как об ошибках. IMO, это хорошая практика, так как она заставляет вас хотя бы взглянуть на это место, чтобы увидеть, действительно ли вы допустили программную ошибку.

Я не знаю, какой компилятор вы используете, но я не знаю ни одного, который бы не выводил по крайней мере номер строки при выводе предупреждений. Используйте доступные вам ресурсы. Компилятор почти наверняка сказал вам, что именно не так и где произошла ошибка. Хотя выражение, которое вы использовали, является допустимым, оно, безусловно, является ошибкой.

4 голосов
/ 17 декабря 2011
int i; 

не инициализирует локальную переменную, проведите эксперимент и распечатайте ее, вы увидите, что она заполнена предыдущим стеком мусора.так что он, вероятно, не будет удовлетворять условию for (;;) и просто никогда не войдет в цикл

use

int i = 0;
1 голос
/ 17 декабря 2011

В displaySum вы не инициализируете переменную i, поэтому она содержит мусорное значение, и ваш цикл будет работать непредсказуемо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...