0
case 4:
        {
            string bookTitleDel;
            int bookPageNDel;
            int bookReviewDel;
            float bookPriceDel;

            cout << "\nPlease Enter the Title to be Deleted: ";
            cin >> bookTitleDel;
            cout << "\nTotal Number of Pages of the Book to be Deleted: ";
            cin >> bookPageNDel;
            cout << "\nPlease Enter Rating (stars): ";
            cin >> bookReviewDel;
            cout << "\nPlease Enter Price: ";
            cin >> bookPriceDel;

            for(int i=0;i<MAX_BOOKS;i++)
            {
                if((books[i].bookTitle!=bookTitleDel) && (books[i].bookPageN!=bookPageNDel) && (books[i].bookReview!=bookReviewDel) && (books[i].bookPrice!=bookPriceDel))
                {

                    cout<<"\n\nBook Doesnt Exist\n";
                    continue;

                }

            }

            for(int i=0; i<MAX_BOOKS; i++)
            {
                if((books[i].bookTitle==bookTitleDel) && (books[i].bookPageN==bookPageNDel) && (books[i].bookReview==bookReviewDel) && (books[i].bookPrice==bookPriceDel))
                {
                    a=i;
                    books[i]= {};
                    cout << "\nBook Deleted\n";
                    for(int k=a; k<MAX_BOOKS-1; k++)
                    {
                        books[k]=books[k+1];
                    }
                    break;
                }

            }

            break; //break to exit switch case #4.

このコードは、「本が存在しない場合」を10回出力します。それを回避する方法は?入力した値を、ここに表示されていない「ブックの追加」オプションですでに追加した値と比較しています。

4

2 に答える 2

5

「BookDoesn'tExist」は、一致するエントリがない場合にのみ、一致するエントリがない場合にのみ印刷する必要があります。

したがって、一致する場合はブール変数をtrue(およびブレーク)に設定し、ループの終了後に一致がない場合は、出力します。

編集:擬似コード

        boolean foundMatch = false;
        for(int i=0;i<MAX_BOOKS;i++)
        {
            if((books[i].bookTitle==bookTitleDel) && (books[i].bookPageN==bookPageNDel) && (books[i].bookReview!=bookReviewDel) && (books[i].bookPrice==bookPriceDel))
            {
                foundMatch = true;
                break;
            }
        }
        if (!foundMatch)
        {
            cout<<"\n\nBook Doesnt Exist\n";
        }

ちなみに、あなたのコードにはバグがありました。等式の条件がである場合、a1 == a2 && b1 == b2 && c1 == c2その否定(それが真の場合は偽)は!(a1 == a2 && b1 == b2 && c1 == c2)NOTa1 != a2 && b1 != b2 && c1 != c2です。

于 2013-02-06T03:37:51.067 に答える
0

2つのforループの代わりに、1つのforループを使用し、Patashuが言ったようにブール変数を使用します。

    switch = false

    for(int i=0; i<MAX_BOOKS; i++)
    {
        if((books[i].bookTitle==bookTitleDel) && (books[i].bookPageN==bookPageNDel) && (books[i].bookReview==bookReviewDel) && (books[i].bookPrice==bookPriceDel))
        {   
            switch = True
            a=i;
            books[i]= {};
            cout << "\nBook Deleted\n";
            for(int k=a; k<MAX_BOOKS-1; k++)
            {
                books[k]=books[k+1];
            }
            break;
        }

    }
    if (switch == False)
     cout<<"\n\nBook Doesnt Exist\n";
于 2013-02-06T03:52:02.237 に答える