2014-02-16 111 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; 
}