为什么我的平行阵列显示随机值?
Why is my parallel array displaying random values?
我应该使用并行数组来根据添加的加载项显示一杯咖啡的量。原来一杯咖啡是2美元。我主要对如何输出正确的结果感到困惑。目前,它会输出 "Order total is2"。我错过了什么?
// JumpinJava.cpp - This program looks up and prints the names and prices of coffee orders.
// Input: Interactive
// Output: Name and price of coffee orders or error message if add-in is not found
#include <iostream>
#include <string>
using namespace std;
int main()
{
// Declare variables.
string addIn; // Add-in ordered
const int NUM_ITEMS = 5; // Named constant
// Initialized array of add-ins
string addIns[] = {"Cream", "Cinnamon", "Chocolate", "Amaretto", "Whiskey"};
// Initialized array of add-in prices
double addInPrices[] = {.89, .25, .59, 1.50, 1.75};
bool foundIt = false; // Flag variable
int x; // Loop control variable
double orderTotal = 2.00; // All orders start with a 2.00 charge
// Get user input
cout << "Enter coffee add-in or XXX to quit: ";
cin >> addIn;
// Write the rest of the program here.
for(int i = 0; i < NUM_ITEMS; i++){
if (addIns[i] == (addIn))
foundIt = true;
if (foundIt)
{
x = orderTotal + addInPrices[i];
cout << "Order Total is" << x << endl;
}
else cout <<"Sorry, we do not carry that."<< endl;
}
return 0;
} // End of main()
这一行:
x = orderTotal + addInPrices[i];
您正在将 x
(int 值)设置为类似 2.00 + 0.25
的值,对吗?您的编译器可能会警告您此处可能会丢失精度。 整数 值只能包含整数:1、2、3 等。如果您尝试将其设置为浮点数,如 2.25,它将被截断(小数点被截断off) 只留下整数部分。所以x = 2.25
的结果会是x中的值2
,和你输出的一致
在您的作业模板中,您的讲师在 x
的声明旁边写了这条评论:
int x; // Loop control variable
在我看来很清楚,x
的目的是成为您在 for 循环中放入的内容,即控制发生多少次循环以及何时结束的变量。您选择创建一个新变量 i
。这也可以解释为什么 x
没有被初始化为任何东西——如果你按照预期的方式进行初始化,那么初始化将在 for 循环中发生。
试试这个:不要使用 x
来存储新价格,只需 添加 附加价格到 orderTotal
,这样它总是最新的并且具有正确的值。这样你根本不需要为此使用 x
,而是可以在 for 循环中使用它。然后,您将在输出中打印 orderTotal
而不是 x
。
我应该使用并行数组来根据添加的加载项显示一杯咖啡的量。原来一杯咖啡是2美元。我主要对如何输出正确的结果感到困惑。目前,它会输出 "Order total is2"。我错过了什么?
// JumpinJava.cpp - This program looks up and prints the names and prices of coffee orders.
// Input: Interactive
// Output: Name and price of coffee orders or error message if add-in is not found
#include <iostream>
#include <string>
using namespace std;
int main()
{
// Declare variables.
string addIn; // Add-in ordered
const int NUM_ITEMS = 5; // Named constant
// Initialized array of add-ins
string addIns[] = {"Cream", "Cinnamon", "Chocolate", "Amaretto", "Whiskey"};
// Initialized array of add-in prices
double addInPrices[] = {.89, .25, .59, 1.50, 1.75};
bool foundIt = false; // Flag variable
int x; // Loop control variable
double orderTotal = 2.00; // All orders start with a 2.00 charge
// Get user input
cout << "Enter coffee add-in or XXX to quit: ";
cin >> addIn;
// Write the rest of the program here.
for(int i = 0; i < NUM_ITEMS; i++){
if (addIns[i] == (addIn))
foundIt = true;
if (foundIt)
{
x = orderTotal + addInPrices[i];
cout << "Order Total is" << x << endl;
}
else cout <<"Sorry, we do not carry that."<< endl;
}
return 0;
} // End of main()
这一行:
x = orderTotal + addInPrices[i];
您正在将 x
(int 值)设置为类似 2.00 + 0.25
的值,对吗?您的编译器可能会警告您此处可能会丢失精度。 整数 值只能包含整数:1、2、3 等。如果您尝试将其设置为浮点数,如 2.25,它将被截断(小数点被截断off) 只留下整数部分。所以x = 2.25
的结果会是x中的值2
,和你输出的一致
在您的作业模板中,您的讲师在 x
的声明旁边写了这条评论:
int x; // Loop control variable
在我看来很清楚,x
的目的是成为您在 for 循环中放入的内容,即控制发生多少次循环以及何时结束的变量。您选择创建一个新变量 i
。这也可以解释为什么 x
没有被初始化为任何东西——如果你按照预期的方式进行初始化,那么初始化将在 for 循环中发生。
试试这个:不要使用 x
来存储新价格,只需 添加 附加价格到 orderTotal
,这样它总是最新的并且具有正确的值。这样你根本不需要为此使用 x
,而是可以在 for 循环中使用它。然后,您将在输出中打印 orderTotal
而不是 x
。