返回值C ++后,函数会提前终止

时间:2014-10-23 21:57:15

标签: c++ function

我正在编写一个包含三个字符串的程序,即。 123.45 / N 23.44 / S位置名称,然后用户输入他们想要比较距离的位置数量,最后是每个位置,即

12.23/N 22.22/E LAX
3
15.55/S 23.444/W Brazil Airport
120.44/N 99.54/E Mexico Airport
99.22/N 44.4/W Unnamed Airport

然后打印出最近的距离(以英里为单位)和距离最远的距离。

我已经能够解析输入的前两个字符串中的数字,并且在一个单独的方法中,它将输入的行数作为参数,通过循环请求输入,并运行两个方法,将值返回给函数外部的变量:距离最远的位置和距离起点最近的位置。

以下是方法:

void getTotalLocations(int amountInput) {
    std::string inputLat, inputLong, inputLoc;
    double inputLatParse, inputLongParse;
    double curLocation;
    // ask user for locations
    for(int i = 0; i < amountInput; i++) {
        // grab input
        std::cin >> inputLat >> inputLong;
        getline(std::cin, inputLoc);
        // parse it
        inputLatParse = numberParse(inputLat);
        inputLongParse = numberParse(inputLong);
        // calculate how far the location is from the starting location
        curLocation = getHaversine(inputLatParse, inputLongParse);
        curLocation = getHaversine(inputLatParse, inputLongParse);
        // find and store the closest and farthest location
        getFarthestTotal(curLocation, inputLat, inputLong, inputLoc);
        getClosestTotal(curLocation, inputLat, inputLong, inputLoc);
    } // end for
}

我的getFarthestTotal和getClosestTotal:

// get the farthest total
double getFarthestTotal(double curFarthestLoc, std::string farthestLatInput, std::string farthestLongInput, std::string farthestLocInput) {
    if(curFarthestLoc > farthestLocTotal) {
        farthestLocTotal = curFarthestLoc;
        // save the farthest location into strings so we can display them later.
        farthestLatitude = farthestLatInput;
        farthestLongitude = farthestLongInput;
        farthestLocation = farthestLocInput;
    }
    return farthestLocTotal;
}

// get the closest total
double getClosestTotal(double curClosestLoc, std::string closeLatInput, std::string closeLongInput, std::string closeLocInput) {
    if(curClosestLoc < closeLocTotal) {
        closeLocTotal = curClosestLoc;
        // save input user entered
        closeLatitude = closeLatInput;
        closeLongitude = closeLongInput;
        closeLocation = closeLocInput;
    }
    return closeLocTotal;
}

我遇到的问题是我的函数getTotalLocation在运行getFarthestTotal()后完全停止,因此它永远不会运行getClosestTotal(),因此我之后永远不会有任何数字显示。据我所知,函数不应该只是在返回一个东西后停止,但这就是它似乎做的事情(在用print语句测试之后)。

我的显示最终看起来像这样(也有奇怪的格式化):

Start Location: 12.23/N 22.22/E ( LAX)
Closest Location:  ()
Farthest Location: 99.22/N 44.4/W ( Unnamed Airport)

我的显示方法如下:

void displayOutput() {
    std::cout << "Start Location: " << startLatitude << " " << startLongitude << " (" << startLocation << ")" << std::endl;
    std::cout << "Closest Location: " << closeLatitude << " " << closeLongitude << " (" << closeLocation << ") (" << closeLocTotal << " miles) " << std::endl;
    std::cout << "Farthest Location: " << farthestLatitude << " " << farthestLongitude << " (" << farthestLocation << ") (" << farthestLocTotal << " miles)" << std::endl;
}

基本上,我的功能导致它停止了什么问题?那么为什么它也会拧紧我的输出(即它在点击farthestLocation变量并且在位置名称之前增加一个额外的空格后不会打印英里数)?

0 个答案:

没有答案