【问题标题】:how to avoid the same thing being printed over and over?如何避免一遍又一遍地打印相同的东西?
【发布时间】:2013-02-06 03:35:56
【问题描述】:
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 次,如果它不存在。如何避免?我正在将输入的值与我已经使用此处未显示的“添加书籍”选项添加的值进行比较。

【问题讨论】:

    标签: c++ arrays for-loop


    【解决方案1】:

    您只想在没有任何条目匹配时打印“图书不存在”,而不是每次都不匹配时打印。

    因此,如果有匹配项,则将布尔变量设置为 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 &amp;&amp; b1 == b2 &amp;&amp; c1 == c2,那么它的否定(如果为真则为假)是!(a1 == a2 &amp;&amp; b1 == b2 &amp;&amp; c1 == c2)而不是a1 != a2 &amp;&amp; b1 != b2 &amp;&amp; c1 != c2

    【讨论】:

    • 这正是我想要做的,但不知道怎么做?你介意帮忙吗?
    • @Rapptz 我是 C++ 新手 :)
    • @patashu 我通过在我的 for 循环中放置一个计数器找到了一种不同的方法,但我从你的回答中得到了这个想法,非常感谢。
    【解决方案2】:

    而不是 2 个 for 循环,使用一个 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";
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-15
      • 1970-01-01
      • 1970-01-01
      • 2014-05-11
      • 2016-01-30
      • 1970-01-01
      • 2021-06-05
      • 2016-12-20
      相关资源
      最近更新 更多