我正在编写一个包含三个字符串的程序,即。 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变量并且在位置名称之前增加一个额外的空格后不会打印英里数)?