2016-03-04 99 views
1

我正在嘗試做一個項目,詢問有關酒店訪問的問題,並重復回答問題,非常簡單。到目前爲止,我有這個代碼:這段代碼爲什麼跳過設置字符串變量的if語句?

#include<iostream> 
#include<string> 
using namespace std; 

int main() 
{ 
    int df; 
    int days; 
    string bed; 
    string bn; 

    cout << "Welcome to C++ Hotel, we have to ask you a few questions about your stay in order to give you the correct rate." << endl; 
    cout << "First, what floor would you like to stay on? (We currently have rooms available from floors 2 to 12)" << endl; 
    cin >> df; 
    while (df > 12 && 2 < df){ 
     cout << "Sorry, but your answer is invalid, please enter a floor from 2 to 12." << endl; 
     cin >> df; 
    } 
    cout << "Okay, we will register your room on floor " << df << "." << endl; 
    cout << "Now, what type of bed will you be requesting during your visit? On floor " << df << " we currently have doubles, queens, or a suite." << endl; 
    cin >> bed; 
    while (bed != "d" && bed != "q" && bed != "s"){ 
     cout << "Sorry, but your answer is invalid, please choose between a double, queen or suite by entering either d, q, or s respectively." << endl; 
     cin >> bed; 
    } 

    if (bed == "d"){ 
     string bn = "double"; 
    } 
    if (bed == "q"){ 
     string bn = "queen"; 
    } 
    if (bed == "s"){ 
     string bn = "suite"; 
    } 
    cout << "Okay, your room will be on floor " << df << " with a " << bn << "  sized bed!" << endl; 
} 

我希望用戶能夠輸入d,q或S爲雙,女王或套房牀尺寸的選擇,但我也不想重複他們選擇了什麼在問題的最後,如果它表達了「你已經選擇了d尺寸的牀!」的話,這顯然聽起來很愚蠢!

因此,我做了幾個if語句,基本上根據用戶輸入的原始牀變量的基礎設置了一個新的字符串變量。所以如果他們把double放在d中,那麼bn變量被設置爲「double」,然後在最後的cout中調用bn。

但是,代碼似乎只是完全跳過了3個if語句,然後在變量被調用時它只是空白,代碼運行良好,沒有任何錯誤或警告或任何事情,但我可以'弄清楚爲什麼它只是不承認代碼,對我來說似乎沒有問題?

+3

'df> 12 && 2 12 || df <2' –

+2

@Dante:如果您懷疑程序正在跳過代碼,那麼您應該在其中放置一個'cout'語句來打印某些內容(或者甚至更好地使用'cerr',或者甚至更好地使用調試器並逐步執行代碼)。 – indiv

+1

'df> 12 && 2

回答

5

更換string bn = "double";

bn = "double"; 

您聲明另一個本地string名稱爲bn並將其設置爲某個值與實際bn你打算設置保持不變。

延伸閱讀:Scope in C++

+1

啊我看到這樣是因爲我已經說過這是一個字符串,在主開始時我不需要再這樣做。謝謝我還是新手,我不知道爲什麼它完全跳過它(或者至少這是它看起來正在做的),但它現在可行了!謝謝,我會記住這個未來。 – Dante

+1

另外請確保您閱讀了推薦的進一步閱讀並理解它。任何你不明白的地方都會嘗試谷歌它。如果你不明白這是一個新問題。並檢查來自M.M –

+0

的評論這不是它「跳過它」。這是因爲你聲明瞭一個相同名稱的新變量,僅局部於if塊,爲其分配了一個字符串,然後該局部變量在代碼退出if塊時被刪除。沒有跳過;這只是代碼沒有做任何有趣的事情! :) –