2013-07-21 47 views
1

最近我一直在購物車的任務,並不明白爲什麼下面的代碼不起作用。購物車分配,getline概念()

我必須編寫一個代碼,輸出名稱,成本和數量的項目,三個項目不使用數組。

在最多三個項目的末尾,我必須顯示項目的總成本。目前我被卡住了,因爲在我添加第二個項目後,程序似乎沒有要求第一個輸入(項目名稱)。下面的代碼:

#include <iostream> 

int main() { 
    int total; 

    std::cout << "Item name:"; 
    std::string itemName; 
    std::getline(std::cin,itemName); 

    std::cout << "Cost(in cents):"; 
    int cost; 
    std::cin >> cost; 

    std::cout << "Quantity:"; 
    int quantity; 
    std::cin >> quantity; 

    std::cout << "Do you want to add more items? (Y/N)"; 
    char option; 
    std::cin >> option; 

    if (option == 'y') { 
    std::cout << "Item name:"; 
    std::string itemName2; 
    std::getline(std::cin,itemName2); 

    std::cout << "Cost(in cents):"; 
    int cost2; 
    std::cin >> cost2; 

    std::cout << "Quantity:"; 
    int quantity2; 
    std::cin >> quantity2; 

    std::cout << "Do you want to add more items? (Y/N)"; 
    char option2; 
    std::cin >> option2; 

    if (option2 == 'y') { 
     std::cout << "Item name:"; 
     std::string itemName3; 
     std::getline(std::cin,itemName3); 

     std::cout << "Cost(in cents):"; 
     int cost3; 
     std::cin >> cost3; 

     std::cout << "Quantity:"; 
     int quantity3; 
     std::cin >> quantity3; 

     total = cost*quantity + cost2*quantity2 + cost3*quantity3; 
     std::cout << "Total value:" << total; 
    } 
    else { 
     total = cost*quantity + cost2*quantity2; 
     std::cout << "Total value:" << total; 
    } 
    } 
    else { 
    total = cost*quantity; 
    std::cout << "Total value:" << total; 
    } 

    return 0; 
} 

後的每個項目輸入後,我輸入「Y」,該代碼會以某種方式跳過我的ITEMNAME和輸出輸入「費用(分):」一起「項目名稱:」在同一條線。

我認爲這與getline()函數有關,但我不知道具體是什麼。任何幫助是極大的讚賞。

+0

的可能重複[函數getline不要求輸入?](http://stackoverflow.com/questions/6642865/getline-not-asking-細節for-input) – interjay

回答

1

很遺憾,您正在使用getline並且沒有包含<string>頭文件。

第二,您可能因爲cin緩衝區而面臨問題。在輸入option後,您應該使用cin.ignore()來提取字符並丟棄或者其他選項可能會清除cin緩衝區。

cin.ignore()將工作忽略流中的1個字符。
你可以嘗試std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); 這將提取儘可能多的字符,直到``\ n ''


我嘗試以下的VS2012的代碼,它工作正常。

#include <iostream> 
#include <string> 


int main() { 
int total; 

std::cout << "Item name:"; 
std::string itemName; 
std::getline(std::cin,itemName); 

std::cout << "Cost(in cents):"; 
int cost; 
std::cin >> cost; 

std::cout << "Quantity:"; 
int quantity; 
std::cin >> quantity; 

std::cout << "Do you want to add more items? (Y/N)"; 
char option; 
std::cin >> option; 
std::cin.ignore(); 

if (option == 'y') { 
std::cout << "Item name:"; 
std::string itemName2; 
std::getline(std::cin,itemName2); 

std::cout << "Cost(in cents):"; 
int cost2; 
std::cin >> cost2; 

std::cout << "Quantity:"; 
int quantity2; 
std::cin >> quantity2; 

std::cout << "Do you want to add more items? (Y/N)"; 
char option2; 
std::cin >> option2; 
    std::cin.ignore(); 

if (option2 == 'y') { 
    std::cout << "Item name:"; 
    std::string itemName3; 
    std::getline(std::cin,itemName3); 

    std::cout << "Cost(in cents):"; 
    int cost3; 
    std::cin >> cost3; 
    std::cout << "Quantity:"; 
    int quantity3; 
    std::cin >> quantity3; 

    total = cost*quantity + cost2*quantity2 + cost3*quantity3; 

    std::cout << "Total value:" << total; 
} 
    else { 
    total = cost*quantity + cost2*quantity2; 
    std::cout << "Total value:" << total; 
} 
} 
else { 
total = cost*quantity; 
std::cout << "Total value:" << total; 
} 

system("pause"); 
return 0; 
} 

有關cin.ignore()see this link.

0

您應該使用

std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); 

對於刪除\n,保持輸入option之後。

+0

我很抱歉,但這到底是做什麼的?對不起,我對C++還很陌生。 – xbili

+0

@xbili,你可以閱讀更多關於它[這裏](http://en.cppreference.com/w/cpp/io/basic_istream/ignore)。 – soon

-1

你可以這樣做: STD:CIN >> ITEMNAME

而不是做: 的std ::函數getline(給std :: cin,ITEMNAME)

這將是最簡單沒有空格的字符串的方法!

+0

對於字符串輸入來說這不是一個好方法,因爲如果空格出現在字符串中,它將無法正常工作。 –