我最近一直在做购物车任务,无法理解为什么下面的代码不起作用。
我必须编写一个代码,输出三个项目的名称,成本和数量,而不使用数组。
在最多三件物品结束时,我必须显示物品的总成本。目前我被困住了,因为在我添加第二个项目后,程序似乎没有要求第一个输入(项目名称)。这是代码:
#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的输入并输出'Cost(以美分):'以及'Item name:'在同一行中。
我认为它与getline()函数有关,但我不确切知道是什么。任何帮助是极大的赞赏。
答案 0 :(得分:1)
很明显,您使用的是getline
,但未包含<string>
头文件。
2,由于cin
缓冲区,您可能面临问题。在为cin.ignore()
提取输入后,您应该使用option
来提取字符并丢弃或其他选项可能正在清除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.
答案 1 :(得分:0)
你应该使用
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
要删除\n
,请在输入option
后保留。
答案 2 :(得分:-1)
而不是做: 的的std ::函数getline(标准:: CIN,ITEMNAME)强>
对于没有空格的字符串,这将是最简单的方法!