首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CRUD (添加/查看/编辑/删除/查看全部记录)

CRUD (添加/查看/编辑/删除/查看全部记录)
EN

Stack Overflow用户
提问于 2018-04-24 12:36:27
回答 1查看 5.2K关注 0票数 0

我遇到了字符串输入的问题,每当我输入一个字符串,程序就会停止运行,如果可能的话,请修复我在记录上的语句,因为它们似乎不能很好地工作。另外,我如何删除一个字符串?我尝试在这里将其替换为“none”作为示例。提前谢谢你!

下面是我的代码:

代码语言:javascript
复制
#include <iostream>
using namespace std;

int main(){

    //Initializing
    char choice;
    int i, j, record=0, totalrecord;
    int id[record];
    string name[record];
    double price[record];
    bool back=true;
    string none;


    //Menu
    while(back=true){   
        cout<<"*******************************"<<endl;
        cout<<"[A] Add Record"<<endl;
        cout<<"[V] View Record"<<endl;
        cout<<"[E] Edit Record"<<endl;
        cout<<"[D] Delete Record"<<endl;
        cout<<"[L] View All Record"<<endl;
        cout<<"Enter your choice and press return: "<<endl;

        cin >> choice;

        switch (choice){

            //Add Record
            case 'a':
            case 'A':
            record++;
            cout<<"Input ID: ";
            cin>>id[record];
            cout<<"Input Name: ";
            cin>>name[record];
            cout<<"Input Price: ";
            cin>>price[record];
            break;

            //View Record
            case 'v':
            case 'V':
            cout<<"Enter ID you wish to view: ";
            cin>>id[record];
            cout<<"ID       Name        Price"<<endl;
            cout<<id[record]<<"         "<<name[record]<<"      "<<price[record]<<endl;
            break;

            //Edit Record
            case 'e':
            case 'E':
            cout << "Enter ID you wish to edit: ";
            cin>>id[record];
            cout<<"Input NEW name: ";
            cin>>name[record];
            cout<<"Input NEW price: ";
            cin>>price[record];
            break;

            //Delete Record
            case 'd':
            case 'D':
            cout << "Enter ID you wish to delete";
            cin>>id[record];
            id[record]=0;
            name[record]=none;
            price[record]=0;
            break;

            //View All Records
            case 'l':
            case 'L':
            cout<<"ID       Name        Price"<<endl;
            for(i=1; i<totalrecord+1; i++){
                cout<<id[i]<<"      "<<name[i]<<"       "<<price[i]<<endl;
            }
            break;

            //Exit Program if invalid input
            default:
            back=false;
            break;
        }
    }
    return 0;
}
EN

回答 1

Stack Overflow用户

发布于 2018-04-24 13:02:23

好吧,这里有一个问题:

代码语言:javascript
复制
int i, j, record=0, totalrecord;
int id[record];
string name[record];
double price[record];

您正在尝试创建可变长度数组,这在C++中是不受支持的。不仅如此,即使它被支持,你也会创建一个大小为0的数组,因为record = 0

因此,对于数组的大小,您需要一个非0的编译时常量值。

代码语言:javascript
复制
constexpr std::size_t RECORD_SIZE = 100; // make this any other that isn't less than or equal to 0

然后,您可以像这样创建数组

代码语言:javascript
复制
int id[RECORD_SIZE];
string name[RECORD_SIZE];
double price[RECORD_SIZE];

然而,这种策略的一个问题是,如果您想要超过RECORD_SIZE的记录数,因为您不能调整数组的大小。因此,我建议您看看我的最后一点。

查看、编辑和删除记录时的逻辑也是不正确的,因为只要数组未满,您总是访问无效的索引,因为record的值将指向一个空槽。不仅如此,而且没有错误检查。

尽管如此,我假设您想要基于索引执行这些操作。

代码语言:javascript
复制
std::size_t index = 0;
std::cin >> index;

然后,对于查看和编辑操作,您将使用该索引来操作记录。

对于删除操作,您必须将删除点右侧的记录向左移动。

但是,对于这些任务,我最终建议您使用std::vector,因为它支持您需要的所有操作,并且具有更大的动态容量。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49993519

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档