2013-07-04 309 views
0

我正在嘗試編寫一個程序,該程序從用戶處獲取測量值並將它們輸入到矢量中。 while循環繼續,直到用戶輸入'|'在此時它會跳出循環並打印測量結果。然而,我遇到的問題是,當試圖將測量結果添加到矢量中時。我使用了調試器,發現循環從未實際進入for循環,因此無法達到「push_back語句」。While循環內的C++ For循環

該程序是Bjarne Stroustup PPP C++書籍的一部分。

#include "../../std_lib_facilities.h" 

double metreConvert (double userInput , String unit) { 

if (unit == "cm") 
userInput = userInput/100; 
else if (unit == "in") 
userInput = (userInput * 2.54)/100; 
else if (unit == "ft") 
userInput = ((userInput * 12) * 2.54)/100; 
else if (unit == "m") 
userInput; 

return userInput; 
} 

void numbers() { 
double input; 
String unit; 
vector <double> measurements; 

    while (cin >> input >> unit && input != '|'){ 
    if (unit == "cm") 
    input = input/100; 
    else if (unit == "in") 
    input = (input * 2.54)/100; 
    else if (unit == "ft") 
    input = ((input * 12) * 2.54)/100; 
    else if (unit == "m") 
    input; 
     for (int i=0; measurements.size(); i++){ 
      if (i == 0 || input != measurements[i]){ 
      cout << "\nPopping onto vector"; 
      measurements.push_back(input); 
      } 
      else { 
      cout << "\nMeasurment cannot be placed on vector"; 

     } 
     } 
    } 
    cout << "input ended"; 
    } 

void main() { 
cout << "Please enter a number followed by a unit(metres,cm,inches,ft), type '|' when finished inputing:"; 
numbers(); 
} 
+2

請正確縮進你的代碼。另外,'for'循環之前的'input'是什麼? –

+0

measurements.size() - 也許檢查不是0? – Jona

回答

0

雷米說什麼,加:

for循環聲明的第二部分是一個條件,這應該評估爲真或假。在你的情況下,你的情況是measurements.size()

問題是你的測量向量中沒有任何東西,所以measurements.size()將返回0.這相當於false。我懷疑這實際上不是你想要做的,你可能是這樣意思的:

for (int i=0; i < measurements.size(); i++){ 

即使這樣,你的邏輯是錯誤的。假設您只是試圖將每個輸入的值添加到測量向量中(如果它不等於之前的測量值),我不明白爲什麼您需要在這裏完成for循環。這將做你想要的:

while (cin >> input >> unit && input != '|') 
{ 
    if (unit == "cm") 
     input = input/100; 
    else if (unit == "in") 
     input = (input * 2.54)/100; 
    else if (unit == "ft") 
     input = ((input * 12) * 2.54)/100; 
    else if (unit == "m") 
     input; //No idea what this is supposed to be - more missing code? 

    if (!measurements.size() || input != measurements[measurements.size()-1]) 
    { 
     cout << "\nPopping onto vector"; 
     measurements.push_back(input); 
    } 
    else 
    { 
     cout << "\nMeasurment cannot be placed on vector"; 
    } 
} 
+0

乾杯隊友,這是一個很大的幫助 – Shaun1810

3

inputdouble|char。它們不是同一件事。因此cin失敗並且您的while循環未輸入。要做你正在嘗試的,你需要首先輸入數據作爲string,檢查其值爲|,如果不匹配,則將其轉換爲double進行進一步處理。

+0

我知道|是一個字符,我輸入到一個double,但我已經得到的代碼沒有for循環,我添加,所以用戶不能兩次添加相同的東西。 – Shaun1810

0

此行

for (int i=0; measurements.size(); i++){ 

引起環路如果measurements矢量不爲空永遠運行(而不是在所有如果向量是空的)。也許你的意思

i < measurements.size()