c中的“数据库”(不是实际的数据库,只是一个简单的事情)

时间:2014-12-04 22:19:10

标签: c database

下面代码的主要思想是让我添加,删除等部分数组,使其看起来或多或少像商店的数据库(这是因为我不知道如何使用指针和等等)。我得到的东西几乎弄清楚了,但我有两大问题:    第一个问题是我得到了一个"分段错误(核心转储)"当我运行代码并选择案例1.我甚至不知道错误的含义,所以我不知道如何解决它。   第二个问题可能是我最大的问题,任何人都可以告诉我如何将数组存储在一个文件中,这样当我再次运行程序时,数组不会是空的,但会从中取出它们的元素退出时保存在同一个文件中(这就是我使用数据库一词的原因)。

  

包括stdio.h
  包括stdbool.h

     

int main()

{ bool bExit = false;
  int select, i, price[5], amount[5];
  char *name[5];
  

DO

{ printf("What would you like to do ?:\n");
  printf("1) Add products \n");
  printf("2) Delete products \n");
  printf("3) Find product by name (shows position and price) \n");
  printf("4) Find product by position (shows name and price) \n");
  printf("6) Display all info of all products  \n");
  printf("7) Modify amount of existing product \n");
  printf("8) Modify price of existing product \n");
  printf("9 Exit \n");
  scanf("%d", &select);
  switch (select)
    {
    case 1:
      {
        for(i=1;i<=5;i++)
          {
            printf("Name: ");
            scanf("%c\n", *name[i]);
            printf("Price: ");
            scanf("%d\n", price[i]);
            printf("Amount: ");
            scanf("%d\n", amount[i]);
          }
        break;
      }
    case 2:

...... bla bla bla ...

    default:
      {
        printf("Good Bye \n");
        bExit = true;
        break;
      }

3 个答案:

答案 0 :(得分:0)

  1. 您没有为您的名字分配任何内存
  2. char * name [5]只是一个包含5个指向字符的数组。

    你可以将char name[5][100]固定为100个字符。

    展望未来,你真的需要为字符串分配内存,并为“数据库”条目分配内存。

    1. 您需要将“数据库”保存到磁盘,然后在启动时再次加载

答案 1 :(得分:0)

创建一个大数组(可能是一个矢量&lt;&gt;),您可以在其中保存所有价格和名称等。然后当您使用scanf进行价格和金额使用时&amp; (如scanf(“%d”,&amp; price [i]))。 然后你在.txt文件上写下这些值(你可以使用c ++ ofstream,google),当你执行代码时,首先你要从文件中读取以前的值(使用ifstream)。

答案 2 :(得分:0)

您不需要为char * name [5]使用任何指针。请改用char name [5]。分段错误可能来自这个陈述

scanf("%c\n", *name[i]);

对于第二个问题创建一个文件,并在您想要读/写时打开它。像

这样的东西
File *fptr=fopen("database","w");
for(i=0;i<5;i++){
    fprintf(fptr,"%s\n",name[i]);

}

请点击此处的链接:http://www.programiz.com/c-programming/c-file-input-output