gpt4 book ai didi

c++ - 我对 cin.getline() 做错了什么?

转载 作者:搜寻专家 更新时间:2023-10-31 00:39:16 24 4
gpt4 key购买 nike

我在编程方面相对较新且缺乏经验,所以如果我的代码让任何人流血,我深表歉意。

问题 #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;
}

提前致谢!

最佳答案

问题#1

cin.getline(accountName, 30, '\n');

getline 的第三个参数是一个字符,而不是一个字符串。此外,上面代码的默认值为 '\n' 与

完全相同
cin.getline(accountName, 30);

问题#2

std::string 在大多数情况下优于 char 数组。例如,对于 std::string,您对字符串的大小没有上限。

关于c++ - 我对 cin.getline() 做错了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16439567/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com