gpt4 book ai didi

c++ - Cin 在循环的第一次迭代后无法执行

转载 作者:行者123 更新时间:2023-11-28 06:37:07 24 4
gpt4 key购买 nike

我有一个 for 循环,要求用户使用 std::cin 进行输入,然后对其执行操作以获得两个经度/纬度点之间的距离。然而,在循环的第一次迭代之后,std::cin 无法执行并再次使用在循环的第一次迭代中存储的变量。

#include<iostream>
#include<string>
#include<cmath>
#include<sstream>
#include<vector>
#include<iterator>
using namespace std;

int main()
{
string startingLocation;
int numDest;
string arrStart[3];

getline (cin, startingLocation);
stringstream ssinStart(startingLocation);

int k = 0;
string airport = "";

while (ssinStart.good() && k < 3)
{
if (k < 2)
{
ssinStart >> arrStart[k];
++k;
}
else
{
string mid;
ssinStart >> mid;
arrStart[k].append(mid);
arrStart[k].append(" ");
}
}

cin >> numDest;

string* destinations = new string[numDest];
double* distDest = new double[numDest];
string dest;

for (int i = 0; i < numDest; i++)
{
cin >> dest;

string arrDest[3];
stringstream ssinDest(dest);

int j = 0;
while(ssinDest.good() && j < 3)
{
if (j < 2)
{
ssinDest >> arrDest[j];
++j;
}
else
{
string mid;
ssinDest >> mid;
destinations[i].append(mid);
destinations[i].append(" ");
}
}

string delimiter = "/";

double lat1 = atof(arrStart[0].substr(0, arrStart[0].find(delimiter)).c_str());
double lat2 = atof(arrDest[0].substr(0, arrDest[0].find(delimiter)).c_str());
double lon1 = atof(arrStart[1].substr(0, arrStart[1].find(delimiter)).c_str());
double lon2 = atof(arrDest[1].substr(0, arrDest[1].find(delimiter)).c_str());

if (*arrStart[0].rbegin() == 'S')
{
lat1 = -lat1;
}
if (*arrDest[0].rbegin() == 'S')
{
lat2 = -lat2;
}
if (*arrStart[1].rbegin() == 'W')
{
lon1 = -lon1;
}
if (*arrDest[1].rbegin() == 'W')
{
lon2 = -lon2;
}

double dlat = lat1 - lat2;
double dlon = lon1 - lon2;
double R = 3959.9;

double a = pow(sin(dlat/2), 2) + cos(lat1) * cos(lat2) * pow(sin(dlon/2), 2);
double c = 2 * atan2(sqrt(a), sqrt(1-a));
double d = R * c;

distDest[i] = d;

}

for (int i = 0; i < numDest; i++)
{
cout << destinations[i] << ": " << distDest[i] << endl;
}

return 0;
}

输入采用起始位置,然后是目的地数量(在本例中为 3),然后应提示用户输入 3 个位置。但是,在输入第一个位置后,它会在循环中迭代剩余的次数,然后在最后输出 double 值(相互叠加)。我假设这是一个内存问题,因为循环内定义的变量在迭代之间被转移,但我没有找到这个问题的运气。

159.123/N 145.22/W Los Angeles
3
124.22/N 23.1222/W San Francisco

: 10919
: 9065.76
: 7619.9

最佳答案

std::cin 只读到 whitespace。因此,当您输入 124.22/N 23.1222/W San Francisco 时,cin 会将其读取为四个字符串。所以你已经为所有的迭代提供了足够的输入。使用 getline 方法读取您之前使用的完整行。

关于c++ - Cin 在循环的第一次迭代后无法执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26601880/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com