我必须为C ++类编写程序,我遇到了一些麻烦。我已经完成了所有变量,我觉得我已经初始化了所有内容,但它仍然无效。
程序参数:计算电费。客户收取每千瓦时0.27千瓦时的费用,然后以每千瓦时0.57美元的额外费率收费。
输入:kwh
输出:总客户账单
代码:
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
//List the variables
double kwh;
double baseKwh;
double extraKwh;
double baseBill;
double extraBill;
double electricBill;
//User inputs the kwh used
cout << "Enter kwh used: "; //Prompt
cin >> kwh;
//Process the data and compute the bill
if (kwh <= 500) {
baseKwh = kwh;
extraBill = 0;
}
else {
baseKwh = 500;
extraKwh = kwh - 500;
}
baseBill = baseKwh * 0.27;
extraBill = extraKwh * 0.55;
electricBill = baseBill + extraBill;
//Output the bill.
cout << "Your bill is $" << electricBill << endl;
system("PAUSE");
return 0;
}
问题:
运行时检查失败#3 - 正在使用变量'extraKwh' 没有被初始化。
Microsoft Visual Studio指向第30行作为问题。当用户输入500以上时,程序工作正常,但是,当用户输入500或更低时,我得到错误信息。
答案 0 :(得分:2)
extraBill = extraKwh * 0.55;
如果else
子句未在此代码之上进行评估,那么extraKwh
确实未初始化。所以你试图读取上面未初始化的变量值并触发undefined behaviour。在声明期间为其分配一些默认值,该问题应该消失。
一般来说,最好在声明期间初始化变量。
答案 1 :(得分:1)
您已声明了您的变量,但已将其留下未初始化。
无论您的代码中发生什么,您都在使用double extraKwh = 0;
。根据您的逻辑判断,您应该在声明它的同时将其初始化为零:
extraKwh
这样,即使您没有点击else
阻止,总会有一个值分配给from django import forms
from django.utils.encoding import force_text
class ModelMultiRawInput(forms.TextInput):
def render(self, name, value, attrs=None):
if value:
value = ','.join([force_text(v) for v in value])
else:
value = ''
return super(ModelMultiRawInput, self).render(name, value, attrs)
def value_from_datadict(self, data, files, name):
value = data.get(name)
if value:
return value.split(',')
。