在编程方面,我相对较新且缺乏经验,所以如果我的代码让任何人的眼睛流血,我会道歉。
问题#1: 当我尝试使用cin.getline()时,我的代码无效,我不断收到错误“无法找到匹配std :: istream :: getline(char [30],int,const char [2])” ,但是当我尝试使用getline(cin,varName)时,它工作得很好。我在使用相同的参数之前使用过cin.getline(),但之前我从未遇到过这个问题。
问题#2: 只是好奇。哪一个更好?在我的情况下,使用cin.getline(...)或getline(cin,___)会更好吗?或者有什么比任何一个更好的东西? 我试着阅读Difference: cin.getline() and 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;
}
提前致谢!
答案 0 :(得分:3)
问题#1
cin.getline(accountName, 30, '\n');
getline的第三个参数是char,而不是字符串。上述代码的默认值为'\ n'与
完全相同cin.getline(accountName, 30);
问题#2
对于大多数用途, std::string
优于char数组。例如,对于std::string
,您对字符串的大小没有上限。
答案 1 :(得分:2)
我认为你应该试试这个
cin.getline(accountName, 30, '\n');
而不是这个。
cin.getline(accountName, 30, "\n");
'\ n'是字符而不是字符串。