2012-05-11 49 views
4

這是我第一次嘗試C++,下面是通過控制檯應用程序計算提示的示例。完整的(工作代碼)如下所示:C++ Noobie - 爲什麼移動這些行會破壞我的應用程序?

// 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的。在一次

林抓我的頭監守我無法理解這是怎麼回事! - 但我假設我是一個傻瓜

感謝

+1

當然,你是不是白癡:) 我懷疑沒有在hadLiquour的最後一個換行符這就是爲什麼它不匹配。嘗試使用調試器進行調查,或只是將值輸出到屏幕。 如果是這樣你可以重寫這個比較只有前3個字符,但我不會毀了你的樂趣如何使它。 –

+0

打印'hadLiquour',看看它包含了什麼,這會給你一些指示什麼是錯的。 – MoonKnight

+2

儘量不要混合** getline()**和** cin **,因爲它可能會導致問題,如[此處](http://www.cplusplus.com/forum/articles/6046/) –

回答

1

totalBill是一個數字,即程序 「消耗」 一切從你的輸入是一個數字。比方說,你輸入:

42.2 [返回]

的42.2被複制到totalBill。 [RETURN]不匹配,並保留在輸入緩衝區中。

現在,當您撥打getline()時,[RETURN]仍然在那裏......我確信您可以從那裏找出其餘的。

0

Cin不會從流中刪除換行符或進行類型檢查。因此,使用cin>>var;並跟着它與另一個cin >> stringtype;getline();將收到空投入。最佳做法是非混合來自cin的不同類型的輸入方法。

[更多信息見link]

你,可以按以下更改代碼:

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; 
相關問題