c++-(C++)小白来提问,程序出错。

问题描述

(C++)小白来提问,程序出错。

#include
using namespace std;

double capital = 0.0;

double cal(int num, double quantity)
{
switch (num)
{
case 0:
return quantity*1.50;
case 1:
return quantity*1.70;
case 2:
return quantity*4.60;
case 3:
return quantity*0.90;
case 4:
return quantity*2.50;
case 5:
return quantity*3.70;
case 6:
return quantity*7.60;
case 7:
return quantity*3.90;
}
}

int main()
{
cout << "提示:本店提供8种水果,如下(左边为水果编号及名称,右边为其单价)" << endl;
cout << "0西瓜 1.50,1木瓜 1.70,2哈密瓜 4.60,3苹果 0.9n" << "4梨 2.50,5柚子 3.70,6猕猴桃 7.60,7山楂 3.90" << endl;
int num_choice = 0;
while (1)
{
int Y_N;
cout << "请输入你你要购买的种类数量:";
cin >> num_choice;

    if (num_choice == 0)
    {
        cout << "您确定只是看看吗?要不买点吧?继续请按1,退出请按0" << endl;
        cin >> Y_N;
        if (Y_N == 0)
        {
            cout << "退出成功!" << endl;
            break;
        }
        else if (Y_N == 1)
        {
        }
        else
            cout << "不要捣乱,请按规定输入哦,亲" << endl;
    }
    else
    {
        cout << "种类编号分别为:";
        int *choice = new int[num_choice];
        double *quantity_choice = new double[num_choice];
        for (int i = 0; i < num_choice; i++)
            cin >> choice[i];
        cout << "请输入对应购买种类的重量:";
        for (int i = 0; i < num_choice; i++)
            cin >> quantity_choice[i];

        for (int j = 0; j < num_choice; j++)
        {
            capital += cal(choice[j], quantity_choice[j]);
        }

        cout << "继续购物吗?继续请按1,否则请按0,开始结算" << endl;
        cin >> Y_N;
        if (Y_N == 0)
        {
            cout << "开始结算,请付款:" << capital << "元" << endl;
            break;
        }
        else if (Y_N == 1)
        {
        }
        else
            cout << "猴子你又调皮了,按规定输入哦" << endl;
    }
}
delete[] choice;
choice = NULL;
delete[] quantity_choice;
quantity_choice = NULL;
system("pause");
return 0;

}

以上是程序,请无视掉小白的system("pause")
以下是错误提示
error C2065: “choice”: 未声明的标识符
error C2541: “delete”: 不能删除不是指针的对象
error C2065: “choice”: 未声明的标识符
error C2065: “quantity_choice”: 未声明的标识符
error C2541: “delete”: 不能删除不是指针的对象
error C2065: “quantity_choice”: 未声明的标识符

应该是因为自己不熟悉int *XXXXX=new int[XXX]的用法,哪位大咖来给讲一下,谢谢了。

解决方案

choice
quantity_choice
的作用域是语句组的大括号内,现在不在此范围,编译器不知道这个名字,所以错误
warning C4715: “cal”: 不是所有的控件路径都返回值

你要加上一个 defult :分支,并返回一个值,
或者在函数最后返回一个值

这样才能保证 函数每个路径,有个正确的返回值,
不然必然有一条路径,返回一个不确定的值

解决方案二:

int *XXXXX=new int[XXX]

XXXXX是int指针,它指向xxx数组的首地址,访问数组元素可以用xxx,也可以用 XXXXX+index

解决方案三:

你的用法没问题,只是choice 出了大括号就看不见了。应该在else{}里面写delete

解决方案四:

想了想,在while循环里面声明choice指针可能无法被识别于是在循环之前便声明了
int *choice = new int[num_choice];
double *quantity_choice = new double[num_choice];


可是新的问题就出现了,再次警报:
warning C4715: “cal”: 不是所有的控件路径都返回值

解决方案五:

new对象的作用于要比delete的对象作用域要大,如果小了会导致指定对象无法找到。
cal函数之针对了0-7的返回,没有返回0-7之外的条件值!

解决方案六:

没有default,switch的选项只有0-7,没有其他的可行值

解决方案七:

作用域没对啊,放在大的else里面吧

时间: 2024-09-12 08:10:15

c++-(C++)小白来提问,程序出错。的相关文章

c++- 小白真心提问C++ delete,为啥连最基本的也会报错嘛

问题描述 小白真心提问C++ delete,为啥连最基本的也会报错嘛 #include <iostream> using namespace std; struct ListNode { int val; ListNode *next; ListNode (int x): val(x), next(NULL) {} }; int main(int argc, char const *argv[]) { // ListNode n1(2); // ListNode dummy(0); // du

php小白请教,if出错 syntax error, unexpected T_IF in

问题描述 php小白请教,if出错 syntax error, unexpected T_IF in $sql=mysql_query("select * from test"); $info=mysql_fetch_array($sql); if($info){ $i=1; do{ ?> value="A">A: value="B">B: value="C">C: value="D"

Win8系统安装KB2770917程序出错的解决方案

Win8更新程序(KB2770917)安装失败怎么办?很多用户在Windows8系统下重启更新程序时遇到更新失败状况,之后系统就自动执行回滚操作,关于这个问题,系统高手给出了以下的解决方案. Win8系统安装KB2770917程序出错的解决方案: 1.利用Win + R快捷键调出"运行"对话框,输入"msconfig",确定运行,打开"系统配置"窗口; 2.切换到"服务"选项卡,勾选下面的"隐藏所有Microsoft

局部变量-为什么这个循环队列程序出错

问题描述 为什么这个循环队列程序出错 #include<malloc.h> typedef struct Queue { int *pBase; int front; int rear; }QUEUE,*PQUEUE; void init(PQUEUE pQ);//初始化队列 bool en_queue(PQUEUE pQ,int val);//向队列里放入数据 void traverse(PQUEUE pQ);//遍历队列 bool full_queue(PQUEUE pQ);//判断队列是

linux-qt上编译opencv程序出错

问题描述 qt上编译opencv程序出错 编译提取棋盘格角点的的程序,但是一直显示cvFindChessboardCorners这个函数有问题,请大神指教! 错误如下: ../qt_subpix1/main.cpp: In function 'int main(int, char**)': ../qt_subpix1/main.cpp:14:19: warning: deprecated conversion from string constant to 'char*' [-Wwrite-st

程序奔溃-长时间运行程序出错问题

问题描述 长时间运行程序出错问题 写了一个C#的数据包解析上传的程序,主要逻辑是程序一直对某一端口进行监听(会有收集数据的硬件,并且端口号是手动输入),每当有数据来,就将数据经过xml文档格式进行解析出来,写入远程数据库.现在一直测试1周的情况下,会出现无法上传数据情况,那会用串口助手监听是有数据上传的.请问:如何解决? 解决方案 我以前碰到过这种情况,很可能是内存泄露,每次都有内存没释放,长时间积累就导致崩溃. 这是我用C++出现的情况,不知道对你有用没?

jre1-java中的Jframe程序出错

问题描述 java中的Jframe程序出错 为什么会出现这个错误? Access restriction: The type 'JFrame' is not API (restriction on required library 'C:Program FilesJavajre1.8.0_25librt.jar') 我是个初学者,不是太懂,这个路径是不可以更改的吗? 还有初学最好下哪个版本的eclipse? 解决方案 应该是你的JDK配置错了吧. (1)看看C:Program FilesJava

qte4 5 3-qte4.5.3编译opencv显示图像程序出错

问题描述 qte4.5.3编译opencv显示图像程序出错 用qte4.5.3 make一个简单的opencv显示图像程序时,出现错误:/usr/local/lib/libopencv_calib3d.so:could not read symbols:Invalid operation 具体的.pro工程文件如下: QT+= core QT-=gui TARGET=opencvqt // 工程文件名 CONFIG+=console CONFIG-=app_bundle CONFIG+=link

mac os x-mac下编译GTK+3.0的“Hello,World”程序出错

问题描述 mac下编译GTK+3.0的"Hello,World"程序出错 我用homebrew下载安装好了gtk+3,然后试着编译了一个网上的示例代码: #include <stdio.h> #include <stdlib.h> #include <gtk/gtk.h> static gboolean delete_event(GtkWidget * widget, GdkEvent * event, gpointer data) { gtk_ma