1

最近、ショッピング カートの割り当てに取り組んでいましたが、以下のコードが機能しない理由がわかりませんでした。

配列を使用せずに、3 つのアイテムの名前、コスト、数量を出力するコードを作成する必要があります。

最大 3 つのアイテムの最後に、アイテムの合計コストを表示する必要があります。現在、2 番目の項目を追加した後、プログラムが最初の入力 (項目名) を要求しないように見えるため、行き詰まっています。コードは次のとおりです。

#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(in cents):」と「Item name:」を出力します。

getline() 関数と何か関係があると思いますが、正確にはわかりません。どんな助けでも大歓迎です。

4

3 に答える 3

1

Frsitly、あなたはヘッダーファイルを使用getlineしていて、含めていません。<string>

cin第二に、バッファが原因で問題に直面している可能性があります。cin.ignore()文字を抽出するための入力を取得した後に使用する必要がoptionあり、破棄または他のオプションがcinバッファをクリアしている可能性があります。

cin.ignore()ストリーム内の 1 文字を無視するために機能します。
あなたは試すことができstd::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\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() このリンクを参照してください。

于 2013-07-21T18:04:05.733 に答える
-1

あなたがすることができます: std:cin>>itemName

代わりに: std::getline(std::cin,itemName)

これは、スペースのない文字列の最も簡単な方法です!

于 2013-07-21T17:59:17.863 に答える