C++ 购物车分配,getline()上的概念
我最近一直在处理一个购物车任务,不明白下面的代码为什么不起作用 我必须写一个代码,将输出名称,成本和数量的项目,为三个项目,而不使用数组 在最多三个项目的末尾,我必须显示项目的总成本。目前我被卡住了,因为在我添加第二个项目后,程序似乎没有要求第一个输入(项目名称)。代码如下:C++ 购物车分配,getline()上的概念,c++,C++,我最近一直在处理一个购物车任务,不明白下面的代码为什么不起作用 我必须写一个代码,将输出名称,成本和数量的项目,为三个项目,而不使用数组 在最多三个项目的末尾,我必须显示项目的总成本。目前我被卡住了,因为在我添加第二个项目后,程序似乎没有要求第一个输入(项目名称)。代码如下: #include <iostream> int main() { int total; std::cout << "Item name:"; std::string itemName
#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;
}
#包括
int main(){
整数合计;
标准:成本;
标准::cout>数量;
std::cout>选项;
如果(选项=='y'){
标准:成本2;
std::cout>quantity2;
标准::cout>选项2;
如果(选项2='y'){
标准:成本3;
std::cout>quantity3;
合计=成本*数量+成本2*数量2+成本3*数量3;
std::cout您应该使用
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
std::cin.ignore(std::numeric_limits::max(),'\n');
对于删除\n
,在输入选项后保留您可以执行以下操作:
std:cin>>itemName
而不是做:
std::getline(std::cin,itemName)
对于没有空格的字符串,这将是最简单的方法!首先,您使用的是getline
,没有包含
头文件
第二,您可能因为cin
buffer而面临问题。您应该在为选项
输入后使用cin.ignore()
来提取字符并丢弃,或者其他选项可能正在清除cin
buffer
cin.ignore()
将用于忽略流中的1个字符。
您可以尝试std::cin.ignore(std::numeric_limits::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;
}
#包括
#包括
int main(){
整数合计;
标准:成本;
标准::cout>数量;
std::cout>选项;
std::cin.ignore();
如果(选项=='y'){
标准:成本2;
std::cout>quantity2;
标准::cout>选项2;
std::cin.ignore();
如果(选项2='y'){
标准:成本3;
std::cout>quantity3;
合计=成本*数量+成本2*数量2+成本3*数量3;
Std::可能的副本我很抱歉,但是这到底是怎么做的?抱歉我对C++还是很新的。@ XBLII,你可以多读一些关于它的信息。这不是一个好的字符串输入方法,因为如果空格出现在字符串中,它就不能正常工作。