这是我在Bjarne Stroustrup的编程原理和C ++ 一书中为练习编写的解决方案的尝试。不幸的是,我写的用于输入所输入硬币总金额的部分并不符合我的要求!
快速回答我会非常感激,但如果有人也有时间可以帮我介绍一些基本的错误检查吗?
我希望它工作的方式是在需要用户输入之后(例如,你有多少20p?),以检查用户是否输入了HashMap
。如果没有,提供一个微妙的错误信息,并有机会重复相同的问题,而不是从一开始就停止程序或启动程序!
int
答案 0 :(得分:0)
您有两个问题:
首先,在没有循环的情况下,代码从上到下运行。这意味着您在读取输入之前计算amount
。
第二个问题是,当您计算amount
(目前,在错误的位置)时,您使用变量one
,ten
等之前他们被初始化了。未初始化的局部变量将具有 indeterminate 值,使用它们将导致未定义的行为。
这两个问题的简单解决方案是在读取输入后将amount
的计算移动到,但在之前写入输出。< / p>
答案 1 :(得分:0)
问题是您使用未初始化的变量计算amount
。所有变量初始化后,您需要计算amount
。您的变量仅在所有cin
语句执行后初始化。
你需要移动
amount = (one * 0.01) + (ten * 0.1) + (twenty * 0.2) + (fifty * 0.5) + one_pound +
(two_pound * 2);
在上一次cin
陈述之后。
int main() {
int one, ten, twenty, fifty, one_pound, two_pound;
double amount;
cout << "Welcome to the change counter app!\nHow many 1p's do you have?\n";
cin >> one;
cout << "How many 10p's do you have?\n";
cin >> ten;
cout << "How many 20p's do you have?\n";
cin >> twenty;
cout << "How many 50p's do you have?\n";
cin >> fifty;
cout << "How many £1 coin's do you have?\n";
cin >> one_pound;
cout << "How many £2 coin's do you have?\n";
cin >> two_pound;
amount = (one * 0.01) + (ten * 0.1) + (twenty * 0.2) + (fifty * 0.5) + one_pound + (two_pound * 2);
cout << "You have: " << one << " 1p coins!\n"
<< "You have: " << ten << " 2p coins!\n"
<< "You have: " << twenty << " 20p coins!\n"
<< "You have: " << fifty << " 50p coins!\n"
<< "You have: " << one_pound << " £1 coins!\n"
<< "You have: " << two_pound << " £2 coins!\n"
<< "The total amount of money you have is: " << amount << "\n";
}