因此,我仍在研究此问题,并认为我已正确。但是,现在仅显示“ ABC Industries”和“ Report”,而不是仅在未输入任何信息的情况下显示。我在哪里弄乱我的代码?
//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;
}
更新资料
这是一个显示默认值的版本:
看到它住在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;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句