C++程序出现错误:“i的值未初始化”

3

这段代码出现了错误,提示“i”没有被初始化,有人能解决吗? 程序可以轻松编译,但在运行时,除了两个switch case之外的所有情况都能正常工作。

#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
displaySum 函数中,你有以下代码:
for (int i; i<count;i++)
    sum+=itemPrice[i];

i 在这里没有被初始化。这可能不是您想要的。

此外,请确保注意编译器告诉您的内容。例如,如果您使用gcc,则可以使用选项“-Wall -Werror”,它会生成常见编程错误的警告,并将其报告为错误。我认为这是一个好的做法,因为它至少迫使您查看该位置,以查看您是否实际上犯了一个编程错误。

我不知道您使用的编译器是哪个,但我不知道有哪个编译器在打印警告时不提供至少一行号。利用您可用的资源。编译器几乎肯定告诉您出了什么问题以及错误发生的位置。虽然您使用的表达式是合法的,但肯定是一个错误。


可能的解决方案是什么? - user1103138
1
请使用 int i = 0;,就像你在其他地方一样。 - Keith Layne
@jeet.mg:与您在其他地方所做的类似,for (int i = 0; ....) - Naveen

4
int i; 

如果不初始化局部变量,执行实验并打印它,你会发现它填充了之前的堆栈垃圾。因此,它可能无法满足 for(;;) 条件,从而永远不进入循环。

使用

int i = 0;

1

displaySum 中,您没有初始化变量 i,因此它包含垃圾值,您的循环将表现出不可预测的行为。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接