0

私のプログラムでは、ユーザーがインベントリの特定のデータを取得するための選択肢をフィルタリングする予定です。たとえば、プログラムの開始時に、データを追加または削除するオプションをユーザーに提供するメニューがあり、たとえば、挿入と言うと、自動車会社 (トヨタやホンダなど) を選択するオプションが提供されます。彼らはその会社を選択します。私は彼らが在庫に追加できるすべてのトヨタ モデルを選択します。これは、私が与えられた情報を絞り込んで選択した操作を実行できるようにするためです。

問題は、特定の会社のモデルを除外する方法がわからないことです。さまざまなモデルを含むさまざまな配列を作成しましたが、その会社のモデルのユーザー オプションを表示する方法がわかりません。

これが私のコードです..

#include <stdio.h>
#include <stdlib.h>

#define MAX_WORD_LENGTH 20

#define MAX_SIZE 100
typedef struct cardata{

    char carname[MAX_WORD_LENGTH];
    char carmodel[MAX_WORD_LENGTH];
    char caryear[MAX_WORD_LENGTH];
    char cartype[MAX_WORD_LENGTH];
    int  quantity;

}CarData;


struct node{

    CarData data;
    struct node *next;
    struct node *prev;
}*start=NULL;

const char *companyList[10] = {"Toyota", "Honda","Hyundai","Nissan","Mitsubishi","VoksWagon","Acura","Ford","Dodge","GMC"};
const char *companyModels[10] = {toyotaModels,hondamodels,hyundaimodels,nissanmodels,mitsubishimodels,vokswagonmodels,acuramodels,fordmodels,dodgemodels,gmcmodels};
const char *toyotaModels[10]={"Corolla","Camery"}
const char *hondaModels[10]={"Civic","Accord"};


void insert_first(){
    struct node *ptr;

    char carname[MAX_WORD_LENGTH];
    char carmodel[MAX_WORD_LENGTH];
    char caryear[MAX_WORD_LENGTH];
    char cartype[MAX_WORD_LENGTH];
    int  carQuantity;
    int ch;

    printf("\n\n\n1.Toyota \n2.Honda \n3.Hyundai \n4.Nissan \n5.Mitsubishi \n6.Volksvagon \n7.Acura \n8.Ford \n9.Dodge \n10.GMC\n");
    printf("\nPress a number to select corresponding car(i.e. 1 for toyota, 2 for honda): ");
    scanf("%d", &ch);
    strcpy(carname,companyList[ch-1]);
    printf("\n\nEnter the car model: ");
    scanf("%s", carmodel);
    printf("\n\nEnter the car year: ");
    scanf("%s", caryear);
    printf("\n\nEnter the car type: ");
    scanf("%s", cartype);
    printf("\n\nEnter the  quantity of models: ");
    scanf("%d", &carQuantity);


    if(start==NULL){

        start=(struct node *)malloc(sizeof(struct node));
        strcpy(start->data.carname,carname);
        strcpy(start->data.carmodel,carmodel);
        strcpy(start->data.caryear,caryear);
        strcpy(start->data.cartype,cartype);
        start->data.quantity=carQuantity;
        start->prev=NULL;
        start->next=NULL;

    }else{

        ptr=start;
        start=(struct node *)malloc(sizeof(struct node));
        strcpy(start->data.carname,carname);
        strcpy(start->data.carmodel,carmodel);
        strcpy(start->data.caryear,caryear);
        strcpy(start->data.cartype,cartype);
        start->data.quantity=carQuantity;
        start->next=ptr;

    }

}

void delete_first(){

    struct node *ptr;
    char carname[MAX_WORD_LENGTH];
    char carmodel[MAX_WORD_LENGTH];
    char caryear[MAX_WORD_LENGTH];
    char cartype[MAX_WORD_LENGTH];
    char modelNumber[MAX_WORD_LENGTH];
    int  carQuantity;

    if(start==NULL){
        printf("\n\nLinked list is empty.\n");
    }else{
        ptr=start;
        printf("\nThe car for which the entry is removed is %s \n",ptr->data.carname);
        strcpy(start->data.carname,carname);
        strcpy(start->data.carmodel,carmodel);
        strcpy(start->data.caryear,caryear);
        strcpy(start->data.cartype,cartype);
        start->data.quantity=carQuantity;
        start=start->next;
        free(ptr);
    }
}

void display()
{
    struct node *ptr=start;
    int i=1;

    if(ptr == NULL){
        printf("\nLinklist is empty.\n");
    }else{
        printf("\nSr. No   Make     Model    Year   Type  Quantity\n");
        while(ptr != NULL){
            printf("\n%d.\t%s   %s   %s   %s   %d\n", i,ptr->data.carname,ptr->data.carmodel,ptr->data.caryear,ptr->data.cartype,ptr->data.quantity);
            ptr = ptr->next;
            i++;
        }

    }
}

int main(void)
{
    int ch;
    do 
    {
        printf("\n\n\n1. Insert \n2. Delete \n3. Display \n4. Exit\n");
        printf("\nEnter your choice: ");
        scanf("%d", &ch);

        switch(ch)
        {

            case 1:
                insert_first();
                break;
            case 2:
                delete_first();
                break;  
            case 3:
                display();
                break;
            case 4:
                exit(0);                                            
            default:
                printf("\n\nInvalid choice. Please try again. \n");

        }

    } while(1);


    return 0;
}
4

1 に答える 1

0

OP: 「モデルのユーザーオプションを表示する方法がわかりません。」

選択した自動車会社からの質問を動的に形成する必要があります。固定リスト サイズを使用しないことを提案し (10 を削除)、示されたリストの末尾に NULL を追加します。scanf の結果と引数の範囲をチェックして、エラー処理を改善します。

const char **CompanyModels[] = { toyotaModels, hondaModels, 0 /* List is 2 long */};

int ModelPrompt(const char **CompanyModels) {
  printf("\n\n\n");
  int i;
  for (i=0; CompanyModels[i], i++) {
    printf("%d.%s \n", d+1, CompanyModels[i]);
  }
  return i;
}

void insert_first(){
  ...
  // recommend replacing next 2 lines with a CompanyPrompt(companyList);
  printf("\n\n\n1.Toyota \n2.Honda \n3.Hyundai \n4.Nissan \n5.Mitsubishi \n6.Volksvagon \n7.Acura \n8.Ford \n9.Dodge \n10.GMC\n");
  printf("\nPress a number to select corresponding car(i.e. 1 for toyota, 2 for honda): ");
  scanf("%d", &ch);
  strcpy(carname,companyList[ch-1]);

  int MaxModelIndex = ModelPrompt(CompanyModels[ch]);
  int carmodelIndex = -1;
  if ((1 != scanf("%d", carmodelIndex)) || (carmodelIndex < 0) || (carmodelIndex > MaxModelIndex)) {
    ; // handle error
  }
  strcpy(carmodel, CompanyModels[ch][carmodelIndex]);

  // continue with similar code for cartype.  
于 2013-08-07T05:16:49.687 に答える