繁体   English   中英

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

[英]c++ program gives an error“ the value of 'i' is not initiated”

此代码给出错误“ i”未启动,有人可以帮忙吗? 该程序很容易编译。 在运行时,每个开关盒均可工作,但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;
}

displaySum您具有:

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

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

另外,请确保注意编译器告诉您的内容。 例如,如果您使用的是gcc,则可以使用选项“ -Wall -Werror”,该选项为常见的编程错误生成警告,并将其报告为错误。 IMO这是一个好习惯,因为它迫使您至少要检查一下该点,看看您是否确实犯了编程错误。

我不知道您使用的是哪个编译器,但我不知道在打印警告时没有至少提供行号的单个编译器。 使用可用的资源。 编译器几乎可以肯定地告诉您确切的错误以及错误的发生位置。 尽管您使用的表达是合法的,但这肯定是错误的。

int i; 

不初始化局部变量,进行实验并打印出来,您将看到它充满了以前的堆栈垃圾。 因此它可能不会满足for(;;)条件,并且永远不会进入循环

使用

int i = 0;

displaySum您没有初始化变量i ,因此它包含垃圾值,并且您的循环将无法正常运行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM