1

これは私が取り組んでいるプロジェクトであり、C++を学ぶために使用している本「StartingwithC++」からのものです。現在、プロジェクトのキャッシャー部分に問題があります。書籍の日付、数量、ISBN、タイトル、価格を入力するようにユーザーに求めます。次に、ユーザーに別の本を入力するかどうかを尋ねます。「y」と「n」のどちらを入力しても、プログラムの次の部分に進みます。別の本を入力するために「y」と入力した後、forループが繰り返されない理由はよくわかりません。また、最後に表示された日付がゴミで出てきているので、もう一つ修正が必要です。どんな助けでもいただければ幸いです。間違いなくもっと多くの問題がありますが、主な問題は最初のforループのキャッシャー機能にあります。私はしませんでした

/*
 *  mainmenu.cpp
 *  Serendipity Booksellers software
 *
 *  Created by Abraham Quilca on 9/5/12.
 *  Copyright 2012 __MyCompanyName__. All rights reserved.
 *
 */


#include<iostream>
#include<iomanip>
#include<cstring>
#include"mainmenu.h"
using namespace std;

char bookTitle[20][51],
 isbn[20][14],
 author[20][31],
 publisher[20][31],
 dateAdded[20][11];
int qtyOnHand[20];
double wholesale[20];
double retail[20];;

int main()
{
    int choice;

do
{
    cout << "\t\t   Serendipity Booksellers"<< endl;
    cout << "\t\t\t  Main Menu" << endl << endl;
    cout << "\t\t1. Cashier Module" << endl;
    cout << "\t\t2. Inventory Database Module" << endl;
    cout << "\t\t3. Report Module" << endl;
    cout << "\t\t4. Exit" << endl << endl;
    cout << "\t\tEnter your choice: ";
    cin >> choice;
    cout << endl;
    switch (choice)
    {
        case 1:
            cashier();
            break;
        case 2:
            invmenu();
            break;
        case 3:
            reports();
            break;
        case 4:
            continue;
            break;
        default:
            cout << "\t\tPlease enter a number in the range 1-4." << endl << endl;
    }
}   
while(choice != 4);
cout << "\t\tYou selected item 4." << endl;
return 0;
}

// Cashier function

void cashier()
{
    char again;
    char date[8];
    int quantity[20] = {0};
    char ISBN[20][20] = {0};
    char title[20][40] = {0};
    float price[20] = {0}, bookTotal[20] = {0}, subtotal, total, tax;
    const float tax_rate = .06;

    cout << "Serendipity Booksellers" << endl;
    cout << " Cashier Module" << endl << endl;

    for(int count = 0; count < 20; count++)
    {
        cout << "Date: ";
        cin >> date;
        cout << "Quantity of Book: ";
        cin >> quantity[count];
        cout << "ISBN: ";
        cin >> ISBN[count];
        cout << "Title: ";
        cin.ignore();
        cin.getline(title[count], 40);
        cout << "Price: ";
        cin >> price[count];
        bookTotal[count] = quantity[count] * price[count];
        subtotal += price[count];
        cout << "Would you like to enter another book? (Y/N) ";
        cin >> again;
        if(again == 'N' || 'n')
            count = 21; // This line will end the for loop
    }
    // Calculating tax and total
    tax = subtotal * tax_rate;
    total = subtotal + tax;

    cout << "\n\nSerendipity Booksellers" << endl << endl;
    cout << "Date:" << date << endl << endl;
    cout << "Qty\t ISBN\t\t "
        << left << setw(40) << "Title" << "Price\t Total" << endl
        <<     "-------------------------------------------------------------------------------"
        << endl << endl;
    for(int count = 0; count < 20; count++)
    {
        cout << quantity[count] << "\t " << ISBN[count] << "   " << left << setw(40) << title[count] 
        << setprecision(2) << fixed << "$" << setw(6) << price[count] << " $" << setw(6) << bookTotal[count]
        << endl << endl;
    }
    cout << "\t\t\t Subtotal" << "\t\t\t\t         $" << setw(6) << subtotal << endl;
    cout << "\t\t\t Tax" << "\t\t\t\t                 $" << setw(6) << tax<< endl;
    cout << "\t\t\t Total" "\t\t\t\t                 $" << setw(6) << total << endl << endl;
    cout << "Thank You for Shopping at Serendipity!" << endl << endl;
}
4

2 に答える 2

2
if(again == 'N' || 'n')

これはあなたが思っていることをしません。このように見てください:

if((again == 'N') || ('n'))

again == N本当ですか、nそれとも本当ですか?Wellnは常にtrue(charゼロ以外の値)であるため、ループは常にすぐに終了します。あなたが欲しいものは:

if(again == 'N' || again == 'n')

breakまた、適切な名前のキーワードを使用してループから抜け出すことができます。

if (again == 'N' || again == 'n') {
  break;
}
于 2012-12-14T17:11:13.613 に答える
1

ループの問題は次の行です。

 if(again == 'N' || 'n')

againC ++は、両方の文字をチェックすることを意味していることを認識していません。代わりに、試行again == 'N'しますが、失敗し、次に試行'n'します。これは、ゼロではなく、trueと評価されます。

代わりに、次を試してください。

if (again == 'N' || again == 'n')
  break;
于 2012-12-14T17:12:48.460 に答える