for 루프를 사용하여 사용자에게 std::cin
을 사용하여 입력을 요청한 후 두 경도/위도 점 사이의 거리를 얻기위한 연산을 수행합니다. 그러나 루프의 첫 번째 반복 후 std::cin
은 루프의 첫 번째 반복에 저장된 변수를 실행하고 다시 사용하지 못합니다.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)의 시작 위치, 목적지의 다음 번호 걸린다. 그러나 첫 번째 위치를 입력 한 후 루프를 반복하여 남은 횟수만큼 끝까지 복식을 출력합니다 (서로 합성 됨). 루프 내에서 정의 된 변수가 반복 사이에 이월되고 있기 때문에 이것이 메모리 문제라고 가정합니다. 그러나 문제에 대한 검색은 없었습니다.
내가
159.123/N 145.22/W Los Angeles
3
124.22/N 23.1222/W San Francisco
O
: 10919
: 9065.76
: 7619.9
C++을 만지지는 않았지만 실제로 문자열 입력에'cin' 만 사용해야합니까? 'getline'은 어떨까요 –
문자열 입력을 수집하는 더 좋은 방법을 제안합니까? 'getline' 메소드를 사용하지 않으려 고 시도했습니다 – asdf
입력 및 출력을 표시 할 수 있습니까? – Shadow