0

我正在尝试编写一个程序,该程序从用户那里获取测量值并将它们输入到向量中。while 循环一直持续到用户输入 '|' 此时它会跳出循环并打印测量值。然而,我遇到的问题是,当尝试将测量值添加到向量时。我使用了调试器,发现循环实际上从未进入 for 循环,因此无法到达“push_back 语句”。

该程序是 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();
 }
4

3 回答 3

3

input是一个double|是一个char。它们不是同一件事。所以cin失败了,你的while循环没有进入。要执行您正在尝试的操作,您需要首先输入数据string,检查其值|,如果不匹配,则将其转换为 adouble以进行进一步处理。

于 2013-07-04T17:36:02.433 回答
0

这条线

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

如果向量不为空,则导致循环永远运行measurements(如果向量为空,则根本不运行)。也许你的意思是

i < measurements.size()
于 2013-07-04T17:53:15.587 回答
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";
    }
}
于 2013-07-04T17:53:39.297 回答