购物车分配,getline上的概念()

时间:2013-07-21 14:22:03

标签: c++

我最近一直在做购物车任务,无法理解为什么下面的代码不起作用。

我必须编写一个代码,输出三个项目的名称,成本和数量,而不使用数组。

在最多三件物品结束时,我必须显示物品的总成本。目前我被困住了,因为在我添加第二个项目后,程序似乎没有要求第一个输入(项目名称)。这是代码:

#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()函数有关,但我不确切知道是什么。任何帮助是极大的赞赏。

3 个答案:

答案 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:CIN&GT;&GT; ITEMNAME

而不是做: 的的std ::函数getline(标准:: CIN,ITEMNAME)

对于没有空格的字符串,这将是最简单的方法!