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,你可以多读一些关于它的信息。这不是一个好的字符串输入方法,因为如果空格出现在字符串中,它就不能正常工作。