2014-02-16 80 views
1

我给了一个问题域。编写一个程序,询问用户想要购买哪些水果以及数量。根据用户的输入,它会产生一张账单。 交互示例: 是否要购买水果?是创建2个2结构的数组。

哪个水果?橙色

多少磅? 2

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

哪个水果? Apple

多少磅? 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 << 

    } 
    } 



} 

水果数量价格

我a m得到很多错误。其中之一是“string fruit_chioce”中的字符串不会变成蓝色。编译器说char选择之前应该有一个“;” 。我也无法为这些结构关联数组。任何帮助将不胜感激,谢谢。

+0

没有开头{for main()for starters。 – codah

+0

水果[5]如水果[5]。价格超出界限。 –

+0

你不能(很容易)混合使用C++字符串和'C'字符串。坚持C++。尝试'fruits [0] .fruitName =“香蕉”等。或者更好,初始化一个数组为'fruitData fruits [] = {“Banana”,“Apple”,...};' – codah

回答

0

在晶格结构fruitData

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作为

(一个非常奇怪的决定),其是它可以包含仅一个字符。而且我觉得你的意思fruitName而不是fruit_ordered因为下面你写

strcpy(customers[0].fruitName, "Banana"); 

但结构没有声明这个名字。因此,您再次可能不像您所做的那样使用标准C函数strcpy,因为fruitName不是字符数组。

此外,您没有在头文件<cstring>中声明C函数。

这种说法(以及类似的语句)

cin >> choice >> 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 << 

} 
} 

没有任何意义使用std::endl

我认为还有其他的错误,但它是ENOGH我已经显示。考虑到,对于具有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。

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

0
  1. int main()后应该有一个{紧随其后。

  2. fruits只有5个元素长,但你在这里尝试访问第六:(我猜它真的应该是4而不是5

    fruits[5].price=1.40; 
    
  3. fruitName是一个C++字符串,可以” t使用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; 
    

    我也换成0count,因为你肯定不希望总是输出第一个数组元素。

+0

查看其他答案,我错过了一些东西。 – Nabla

+0

谢谢你的帮助。我已成功提交此实验室。 – user3316780

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; 
}