4

これは、コンソール アプリケーションを介してヒントを計算する例に従って、C++ での私の最初の試みです。完全な (作業コード) を以下に示します。

// Week1.cpp : Defines the entry point for the console application.

#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    // Declare variables
    double totalBill = 0.0;
    double liquour = 0.0;
    double tipPercentage = 0.0;
    double totalNoLiquour = 0.0;
    double tip = 0.0;
    string hadLiquour;

    // Capture inputs
    cout << "Did you drink any booze? (Yes or No)\t";
    getline(cin, hadLiquour, '\n');

    if(hadLiquour == "Yes") {
        cout << "Please enter you booze bill\t";
        cin >> liquour;
    }

    cout << "Please enter your total bill\t";
    cin >> totalBill;

    cout << "Enter the tip percentage (in decimal form)\t";
    cin >> tipPercentage;

    // Process inputs
    totalNoLiquour = totalBill - liquour;
    tip = totalNoLiquour * tipPercentage;

    // Output
    cout << "Tip: " << (char)156 << tip << endl;
    system("pause");

    return 0;
}

これはうまくいきます。ただし、移動したい:

cout << "Please enter your total bill\t";
cin >> totalBill;

以下の最初の行になります。

 // Capture inputs

しかし、私がアプリケーションを壊すと (コンパイルはしますが、if ステートメントを無視して、両方の cout を一度に出力します。

何が起こっているのか理解できないので、頭をかきむしっていますが、私はばかだと思っています!

ありがとう

4

3 に答える 3

6

これを試して

    // Capture inputs
cout << "Please enter your total bill\t";
cin >> totalBill;
cin.clear();
cin.sync();

c++ getline() が複数回呼び出されたときにコンソールからの入力を待機していないことを確認してください

または、getline をまったく使用しない方がよいでしょう。

cout << "Please enter your total bill\t";
cin >> totalBill;

cout << "Did you drink any booze? (Yes or No)\t";
cin >> hadLiquour;
于 2012-05-11T08:35:59.103 に答える
1

totalBillつまり、プログラムは入力から数値であるすべてを「消費」します。あなたが入力したとしましょう:

42.2[戻る]

42.2 が にコピーされtotalBillます。[RETURN] が一致せず、入力バッファに残ります。

今、あなたが を呼び出したときgetline()、[RETURN] はまだそこに座っています... そこから残りを把握できると確信しています。

于 2012-05-11T08:39:28.560 に答える
0

Cin は、ストリームから改行文字を削除したり、型チェックを行ったりしません。したがって、それを使用して別のorcin>>var;でフォローアップすると、空の入力が返されます。cin からのさまざまな種類の入力メソッドを混在させないことがベスト プラクティスです。cin >> stringtype;getline();

【詳しくはリンク先参照】

以下のようにコードを変更できます。

cout << "Please enter your total bill\t";
getline(cin, hadLiquour);          // i used the hadLiquour string var as a temp var 
                                   // so don't  be confused
stringstream myStream(hadLiquour);
myStream >> totalBill;
于 2012-05-11T08:51:18.557 に答える