Я относительно новичок и неопытен в программировании, поэтому приношу свои извинения, если у кого-то глаза кровоточат от моего кода.
Вопрос № 1: Мой код не работал, когда я пытался использовать cin.getline(), и я продолжаю получать сообщение об ошибке «Не удалось найти совпадение для std::istream::getline(char[30], int, const char[ 2])", но когда я попытался использовать getline(cin, varName), все сработало отлично. Я использовал cin.getline() перед использованием того же параметра, но раньше у меня никогда не было этой проблемы.
Вопрос №2: Просто интересно. Какой лучше? В моем случае лучше использовать cin.getline(...) или getline(cin, ___)? Или есть что-то еще лучше, чем любой из них? Я попытался прочитать Разница: cin.getline() и getline(cin, st) но я не уверен, что это хороший ответ.
Я включу обе копии рабочего и нерабочего кода. Пожалуйста, не обращайте внимания на имена, это всего лишь часть гораздо большего задания, которое меня попросили выполнить.
Не рабочий код:
#include<time.h>
#include<iostream>
#include<string>
using namespace std;
class ElectricityBill
{
private:
char accountName[30];
char address[50];
tm dueDate;
tm periodStartDate;
tm periodEndDate;
public:
ElectricityBill();
void print();
};
ElectricityBill::ElectricityBill()
{
int dd, mm, yyyy;
cout << "Input electricity bill data." << endl;
cout << "Account name: ";
cin.getline(accountName, 30, "\n");
cout << "Address: ";
cin.getline(address, 50, "\n");
cout << "Start date: ";
cin >> dd >> mm >> yyyy;
periodStartDate.tm_mday = dd;
periodStartDate.tm_mon = mm;
periodStartDate.tm_year = yyyy;
cout << "End date: ";
cin >> dd >> mm >> yyyy;
periodEndDate.tm_mday = dd;
periodEndDate.tm_mon = mm;
periodEndDate.tm_year = yyyy;
cout << "Due date: ";
cin >> dd >> mm >> yyyy;
dueDate.tm_mday = dd;
dueDate.tm_mon = mm;
dueDate.tm_year = yyyy;
//next = NULL;
}
void ElectricityBill::print()
{
cout << "Account Name: " << accountName << endl;
cout << "Address : " << address << endl;
cout << "Start Date : " << periodStartDate.tm_mday << "/" << periodStartDate.tm_mon << "/" << periodStartDate.tm_year << endl;
cout << "End Date : " << periodEndDate.tm_mday << "/" << periodEndDate.tm_mon << "/" << periodEndDate.tm_year << endl;
}
int main()
{
ElectricityBill a;
a.print();
return 0;
}
Вот копия рабочего кода, когда я использую getline(cin, varName)..
#include<time.h>
#include<iostream>
#include<string>
using namespace std;
class ElectricityBill
{
private:
string accountName;
string address;
tm dueDate;
tm periodStartDate;
tm periodEndDate;
public:
ElectricityBill();
void print();
};
ElectricityBill::ElectricityBill()
{
int dd, mm, yyyy;
cout << "Input electricity bill data." << endl;
cout << "Account name: ";
getline(cin, accountName);
cout << "Address: ";
getline(cin, address);
cout << "Start date: ";
cin >> dd >> mm >> yyyy;
periodStartDate.tm_mday = dd;
periodStartDate.tm_mon = mm;
periodStartDate.tm_year = yyyy;
cout << "End date: ";
cin >> dd >> mm >> yyyy;
periodEndDate.tm_mday = dd;
periodEndDate.tm_mon = mm;
periodEndDate.tm_year = yyyy;
cout << "Due date: ";
cin >> dd >> mm >> yyyy;
dueDate.tm_mday = dd;
dueDate.tm_mon = mm;
dueDate.tm_year = yyyy;
//next = NULL;
}
void ElectricityBill::print()
{
cout << "Account Name: " << accountName << endl;
cout << "Address : " << address << endl;
cout << "Start Date : " << periodStartDate.tm_mday << "/" << periodStartDate.tm_mon << "/" << periodStartDate.tm_year << endl;
cout << "End Date : " << periodEndDate.tm_mday << "/" << periodEndDate.tm_mon << "/" << periodEndDate.tm_year << endl;
}
int main()
{
ElectricityBill a;
a.print();
return 0;
}
Заранее спасибо!