我有Message msg = new MimeMessage(session);
Multipart mp = getAttachments();
msg.setContent(mp); // Whether I set it here, or next-to-last, it never works.
msg.setSentDate(new Date());
msg.setFrom(new InternetAddress("addressFrom"));
msg.setRecipient(Message.RecipientType.TO, new InternetAddress("addressTo"));
msg.setSubject("Subject name");
msg.setText("Message here.");
Transport.send(msg);
,其中没有元素。当提示用户时,他/她输入一个号码,该号码存储在double x[12]
中。
我希望程序首先检查x
是否为空,如果是,请将用户的输入放在x
中,或者如果不是,请将用户&# 39;在下一个免费索引中输入。
我做到了这一点:
x[0]
sizeof()是否与数组无关,是否有更好的方法可以做到这一点?
答案 0 :(得分:1)
当sizeof
应用于数组时,它不会告诉您数组包含多少数据;它告诉你数组可以保持多少数据。您没有指定要放入double x[12]
的任何数据这一事实对数组的大小没有影响。因此,sizeof
将返回系统上所需的字节数,以容纳12个double
的数组。
如果您想保留12个中已分配的项目数,请为其添加单独的变量。将其初始化为零,并使用它来跟踪已插入的项目数:
size_t x_count = 0;
double x[12];
void AddPayment(double Amount) {
if (x_count == 12) {
// Error; we cannot add more than 12 items.
// Tell the user what's going on and quit,
// or handle the error in some other way.
cerr << "Cannot add more than 12 elements to x[]" << endl;
return;
}
x[x_count++] = Amount;
}
答案 1 :(得分:1)
x [12]是否具有值,它的大小始终为12 * sizeof(double)。
因此,使用sizeof()运算符并不是实现目标的好方法。
最好的做法是使用用户无法输入的值(例如0)初始化x [12],并测试数组中第一个可用零位输入该值的位置。
double x[12] = { 0 };
void AddPayment(double Amount)
{
for (int i = 0; i < 12; i++) {
if (x[i] == 0) {
x[i] = Amount;
break;
}
}
}
答案 2 :(得分:0)
我有
double x[12]
,其中没有元素。
这是一种误解。 double x[12];
创建了12个double
元素,使其值处于未定义状态。所以你有12个未初始化的元素。这与 no 元素完全不同。
(例如,如果你有一个std::string
类型的数组,误解就会变得更加清晰。与double
不同,std::string
总是被初始化为一个定义的值,一个空字符串。所以std::string x[12]
肯定是12个字符串,而不是一个空数组。)
当提示用户时,他/她输入一个存储在其中的号码
x
。我希望程序首先检查
x
是否为空,如果是,请放入 用户在x[0]
中的输入,如果不是,则将用户的输入放在下一个 自由指数。
我真的很惊讶没有人建议这样做,但是数组是你想要完成的工具的错误工具。您需要一个可以成长的容器。您需要std::vector
:
std::vector<double> x; // starts off empty
void AddPayment(double Amount)
{
x.push_back(Amount); // grows by 1 element
}
std::vector
还有一个size()
成员函数来告诉您当前的元素数量。不再需要sizeof
。