[英]Creating 2 arrays of 2 structs.
给我一个问题域。 编写一个程序,询问用户他想购买哪些水果以及购买多少水果。 根据用户的输入,它将产生一个账单。 交互示例:您想购买水果吗? 是
哪个水果 橙子
多少磅? 2
您是否要购买另一种水果? 是
哪个水果 苹果
多少磅? 1.5
您要购买水果吗? 没有
谢谢您的生意。
这是你的账单:
水果数量单价价格
橙色2磅1.5 3
苹果1.5磅2 3
总金额6
#include <iostream>
#include <string>
using namespace std;
struct fruitData
{
string fruitName;
float price;
};
struct invoiceData
{
char fruit_ordered;
float price1;
float quantity_ordered;
float totalFruitprice;
} ;
int main()
char choice;
string fruit_choice;
float pounds_choice;
int count=0;
fruitData fruits[5];
invoiceData customers[5];
strcpy(fruits[0].fruitName, "Banana");
strcpy(fruits[1].fruitName, "Apple");
strcpy(fruits[2].fruitName, "Pears");
strcpy(fruits[3].fruitName, "Oranges");
strcpy(fruits[4].fruitName, "Papaya");
fruits[0].price=1;
fruits[1].price=2;
fruits[2].price=2.5;
fruits[3].price=1.5;
fruits[5].price=1.40;
strcpy(customers[0].fruitName, "Banana");
strcpy(customers[1].fruitName, "Apple");
strcpy(customers[2].fruitName, "Pears");
strcpy(customers[3].fruitName, "Oranges");
strcpy(customers[4].fruitName, "Papaya");
customers[0].price=1;
customers[1].price=2;
customers[2].price=2.5;
customers[3].price=1.5;
customers[4].price=1.40;
cout << "Welcome to the fruit market" << endl;
cout << "Would you like to purchase fruit?" << endl;
cin >> choice >> endl;
while (choice == 'Y')
{
cout << "Which fruit?" << endl;
cin >> fruit_choice >> endl;
cout << "How many pounds?" << endl;
cin >> pounds_choice >> endl;
if (fruit_choice == "Banana")
{
customers[0].quantity_ordered = pounds_choice;
customers[0].total_price = customers[0].quantity_ordered * customers[0].price;
}
else if (fruit_choice == "Apple")
{
customers[1].quantity_ordered = pounds_choice;
customers[1].total_price = customers[1].quantity_ordered * customers[1].price;
}
else if (fruit_choice == "Pears")
{
customers[2].quantity_ordered = pounds_choice;
customers[2].total_price = customers[2].quantity_ordered * customers[2].price;
}
else if (fruit_choice == "Oranges")
{
customers[3].quantity_ordered = pounds_choice;
customers[3].total_price = customers[3].quantity_ordered * customers[3].price;
}
else (fruit_choice == "Papaya")
{
customers[4].quantity_ordered = pounds_choice;
customers[4].total_price = customers[4].quantity_ordered * customers[4].price;
}
}
for (count = 1 ; count <=5 ; count++)
{
if (customers[0].total_price != 0)
{
cout << customers[0].fruit_name <<
cout << customers[0].quantity_ordered <<
cout << customers[0].price <<
cout << customers[0].total_price <<
}
}
}
我遇到很多错误。 其中之一是“ string fruit_chioce”中的字符串,并没有像应该的那样变蓝。 并且编译器说char选择应该在“;”之后。 。 我也很难为这些结构关联数组。 任何帮助将不胜感激,谢谢。
在结构果数据中
struct fruitData
{
string fruitName;
float price;
};
数据成员fruitName定义为具有std::string
类型。 您不能将标准C函数strcpy
与std::string
类型的对象一起使用,因为它们不是字符数组。 您可以使用简单的分配。 例如
fruits[0].fruitName = "Banana";
但是最好在定义数组时初始化它。 例如
fruitData fruits[5] =
{
{ "Banana", 1 }, { "Apple", 2 }, { "Pears", 2.5 },
{ "Oranges", 1.5 }, { "Papaya", 1.40 }
};
同样在结构invoiceData中,您将数据成员fruit_ordered定义为
char fruit_ordered;
(一个非常奇怪的决定),即只能包含一个字符。 此外,我认为您的意思是fruitName而不是fruit_ordered,因为您在下面写道
strcpy(customers[0].fruitName, "Banana");
但结构未声明此名称。 同样,您可能不会像以前那样使用标准的C函数strcpy
,因为fruitName不是字符数组。
此外,您没有在C函数声明的地方包含标头<cstring>
。
此声明(和类似声明)
cin >> choice >> endl;
是无效的。 您不得将std::endl
与std::cin
也是这个循环
for (count = 1 ; count <=5 ; count++)
{
if (customers[0].total_price != 0)
{
cout << customers[0].fruit_name <<
cout << customers[0].quantity_ordered <<
cout << customers[0].price <<
cout << customers[0].total_price <<
}
}
没有任何意义
我认为还有其他错误,但这已经是我已经展示的内容了。 考虑到具有5个元素的数组的索引的有效范围是0-4
在这段代码中
fruits[0].price=1;
fruits[1].price=2;
fruits[2].price=2.5;
fruits[3].price=1.5;
fruits[5].price=1.40;
你有错字。 此处的索引为0、1、2、3、5,但必须为0、1、2、3、4。
简而言之,代码中充满了错误。
在int main()
,应紧跟{
。
fruits
只有5个元素长,但是您尝试在此处访问第六个元素:(我想它实际上应该是4
而不是5
)
fruits[5].price=1.40;
fruitName
是一个C ++字符串,不能与它一起使用strcpy
( strcpy
用于C字符串,即基于char*
的字符串)。 只需分配:
fruits[0].fruitName = "Banana";
您的while
循环永远不会结束,因为您再也不会要求输入choice
。
你最后else
这里
else (fruit_choice == "Papaya")
如果还应该是else if
。
您的for循环从零到五个(第六个元素),但是该数组只有5个元素,因此应为:
for (count = 1 ; count < 5 ; count++)
最后的输出行应以操作数(要输出的某个变量)结尾,而不是<<
。 就像其他所有声明一样,它们必须以结尾;
。 例如换行符:
cout << customers[count].fruit_name << endl;
我还用count
替换了0
,因为您肯定不想总是输出第一个数组元素。
最好的方法是使用std :: vector。 例如
#include <iostream>
#include <vector>
#include <string>
using namespace std;
struct Fruit {
string name;
float price;
};
int main() {
vector<Fruit> fruits;
while(true) {
Fruit fruit;
string answer;
cout << "Which fruit? ";
cin >> fruit.name;
cout << "How many pounds? ";
cin >> fruit.price;
fruits.push_back(fruit);
cout << "Do you want to purchase another fruit? ";
cin >> answer;
cout << endl;
if (answer=="No") break;
}
for(int i=0; i<(int)fruits.size(); ++i) {
cout << "Fruit " << i+1 << " -> Name: " << fruits[i].name << ", price: " << fruits[i].price << endl;
}
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.