创建2个结构的2个数组。

时间:2014-02-16 20:29:42

标签: c++ arrays string struct

我遇到了问题域名。编写一个程序,询问用户他想要购买哪些水果以及数量多少。根据用户的输入,它产生一个账单。 示例交互: 你想买水果吗?是

哪种水果?橙

多少磅? 2

你想再购买另一种水果吗?是

哪种水果?苹果

多少磅? 1.5

您想购买其他水果吗?否

感谢您的业务。

这是你的账单:

每磅价格的水果数量价格

橙色2磅1.5 3

Apple 1.5 Lb 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选择之前应该是“;” 。我也无法为这些结构关联数组。任何帮助将不胜感激,谢谢。

3 个答案:

答案 0 :(得分:0)

在strcuture fruitData

struct fruitData
{
    string fruitName;
    float price;
};

数据成员fruitName被定义为具有类型std::string。您不能将标准C函数strcpystd::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::endlstd::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。

简而言之,代码充满了错误。

答案 1 :(得分:0)

  1. int main()之后应立即跟随{

  2. fruits只有5个元素,但您尝试访问第六个元素:(我想它应该是4而不是5

    fruits[5].price=1.40;
    
  3. fruitName是一个C ++字符串,您不能使用strcpystrcpy用于C字符串,即基于char*的字符串) 。只需指定:

    fruits[0].fruitName = "Banana";
    
  4. 您的while循环永远不会结束,因为您再也不会要求输入choice

  5. 您上一次else此处

    else (fruit_choice == "Papaya")
    

    也应该是else if

  6. 你的for循环从零到五(第六个元素),但是数组只有5个元素,所以它应该是:

    for (count = 1 ; count < 5 ; count++)
    
  7. 最后一行输出应以操作数(要输出的某个变量)而不是<<结束。与其他所有陈述一样,他们必须以;结束。例如换行:

    cout << customers[count].fruit_name << endl;
    

    我还将0替换为count,因为您肯定不想总是输出第一个数组元素。

答案 2 :(得分: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;
}