1

そのため、私はまだこの問題に取り組んでおり、正しいと思っていました。ただし、情報が入力されていない場合にのみ表示されるのではなく、「ABC Industries」と「レポート」のみが表示されるようになりました。コードのどこを台無しにしていますか?

//This program displays a company's name and report.
#include <iostream>
#include <string>
#include <Windows.h>
using namespace std;

class Heading {
private:
    string company;
    string report;

public:
    Heading() {
        company = "ABC Industries";
        report = "Report";
    }


    Heading(string c, string r) {
        company = c;
        report = r;
    }


    void storeInfo(string company, string report);

    string getCompany() {
        return company;
    }
    string getReport() {
        return report;
    }
};


void Heading::storeInfo(string c, string r) {
    c = company;
    r = report;
}

void storeInfo(Heading&);
void showInfo(HANDLE, Heading);
void placeCursor(HANDLE, Heading);

int main() {
    Heading company;
    HANDLE screen = GetStdHandle(STD_OUTPUT_HANDLE);
    storeInfo(company);
    showInfo(screen, company);
    cin.ignore();
    cin.get();
    return 0;
}

/*****storeInfo*****/
void storeInfo(Heading &item) {
    string company;
    string report;
    cout << "\nPlease enter the company name.\n";
    getline(cin, company);
    cout << "\nPlease enter the report name.\n";
    \
    getline(cin, report);
    item.storeInfo(company, report);
}

/*****placeCursor*****/
void placeCursor(HANDLE screen, int row, int col) {
    COORD position;
    position.Y = row;
    position.X = col;
    SetConsoleCursorPosition(screen, position);
}

/*****showInfo*****/
void showInfo(HANDLE screen, Heading item) {
    system("cls");
    placeCursor(screen, 6, 25);
    cout << "********************************" << endl;
    placeCursor(screen, 8, 32);
    cout << item.getCompany() << endl;
    placeCursor(screen, 11, 36);
    cout << item.getReport();
    placeCursor(screen, 13, 25);
    cout << "********************************" << endl;
}
4

2 に答える 2

2

アップデート

これは、期待どおりにデフォルトを表示する方法を示すバージョンです。

Coliruでライブを見る

class Heading {
private:
    string company;
    string report;

    static string defaultCompany() { return "ABC Industries"; }
    static string defaultReport () { return "Report"; }

public:
    Heading(string const& c = defaultCompany(), string const& r = defaultReport()) 
        : company(c), report(r) { }

    void storeInfo(string const& c, string const& r)
    {
        company = c;
        report  = r;
    }

    string getCompany() const { return company.empty()? defaultCompany() : company; }
    string getReport()  const { return report.empty()?  defaultReport()  : report;  }
};

ご覧のとおり、受信した入力が空であるかどうかを確認する必要があります。これは、メンバーを常に無条件に に設定するためですstoreInfo

完全なプログラム:

#include <iostream>
#include <string>

using namespace std;

namespace // windows_cruft
{
    using HANDLE = unsigned;
    HANDLE STD_OUTPUT_HANDLE = 1;
    HANDLE GetStdHandle(HANDLE) {return 42;}

    struct COORD { int X,Y; };
    void SetConsoleCursorPosition(HANDLE, COORD){}
}

class Heading {
private:
    string company;
    string report;

    static string defaultCompany() { return "ABC Industries"; }
    static string defaultReport () { return "Report"; }

public:
    Heading(string const& c = defaultCompany(), string const& r = defaultReport()) 
        : company(c), report(r) { }

    void storeInfo(string const& c, string const& r)
    {
        company = c;
        report  = r;
    }

    string getCompany() const { return company.empty()? defaultCompany() : company; }
    string getReport()  const { return report.empty()?  defaultReport()  : report;  }
};

void storeInfo(Heading&);
void showInfo(HANDLE, Heading);
void placeCursor(HANDLE, Heading);

int main() {
    Heading company;
    HANDLE screen = GetStdHandle(STD_OUTPUT_HANDLE);
    storeInfo(company);
    showInfo(screen, company);
    cin.ignore();
    cin.get();
    return 0;
}

/*****storeInfo*****/
void storeInfo(Heading &item) {
    string company;
    string report;
    cout << "\nPlease enter the company name.\n";
    getline(cin, company);
    cout << "\nPlease enter the report name.\n";
    getline(cin, report);
    item.storeInfo(company, report);
}

/*****placeCursor*****/
void placeCursor(HANDLE screen, int row, int col) {
    COORD position;
    position.Y = row;
    position.X = col;
    SetConsoleCursorPosition(screen, position);
}

/*****showInfo*****/
void showInfo(HANDLE screen, Heading item) {
    //system("cls");
    placeCursor(screen, 6, 25);
    cout << "********************************" << endl;
    placeCursor(screen, 8, 32);
    cout << item.getCompany() << endl;
    placeCursor(screen, 11, 36);
    cout << item.getReport() << endl;
    placeCursor(screen, 13, 25);
    cout << "********************************" << endl;
}
于 2013-10-18T00:31:54.753 に答える