我的代碼有問題。所以我們的任務是創建一個代碼,輸入來自txt文件的信息(包括具有經度和緯度的城市名稱),並製作一個遊戲,詢問「哪個城市最接近_____」,併爲您提供3個選項,從中選擇你必須選擇。然後它會告訴你正確/不正確,並顯示你的距離。問題是,我的代碼沒有計算以千米爲單位的城鎮之間的距離,而是一種非常奇怪的形式。結果是例如3.582e-307等。你知道可能是什麼問題嗎?遊戲 - 計算兩個座標之間的距離
#include <iostream>
#include <cstdlib>
#include <stdlib.h>
#include <fstream>
#include <sstream>
#include <string>
#include <time.h>
#include <random>
#include <numeric>
#include <math.h>
#include <cmath>
#include <algorithm>
#include <ctime>
#define PI 3.14159265
using namespace std;
struct District {
double lng ;
double lat ;
string city ;
};
struct Distance {
double lng;
double lat;
};
//void for changing degrees to rad
double dtr(double deg) {
return (deg * PI/180);
};
//void calculation of distance
// this doesnt work correctly - the output isnt the distance in KM, i used the formula from - https://en.m.wikipedia.org/wiki/Great-circle_distance
double* distancecalc (double pos[], double distance[]) {
Distance locat [4] ;
District districts [79] ;
double posi [4];
for (int x=0; x<4; x++) {
posi [x] = pos [x] ;
}
for (int u=posi[0]; u<posi[4]; u++) {
locat [u].lat = districts [u].lat ;
locat [u].lng = districts [u]. lng;
locat [u].lat = dtr(locat [u].lat);
locat [u].lng =dtr (locat [u].lng) ;
}
//calculate the distance between cities (0 (base) and 1-3)
for (int u=0; u<4; u++) {
double ax = locat[0].lat, ay = locat[0].lng, bx = locat[u].lat, by = locat[u].lng;
distance[u] = acos (sqrt(pow(sin((bx-ax)/2.0), 2.0)+cos(ax)*cos(bx)*pow(sin((by-ay)/2.0),2.0))) * 2 * 6371;
return distance ;
}
}
int main() {
int z=1;
do { districts [79] ;
ifstream inputFile;
inputFile.open ("districts.txt") ;
if (!inputFile.is_open()){
cout << "opening txt document" << endl;
return 0 ;
}
//shuffle
int line ;
stringstream ss;
string sdouble ;
for (line=0; line<79; line++) {
getline(inputFile, districts[line].city, ';') ;
getline(inputFile, sdouble, ';') ;
ss<< sdouble;
ss>> districts[line].lng ;
getline(inputFile, sdouble, ';') ;
ss<<sdouble;
ss>>districts[line].lat;
getline(inputFile, sdouble) ;
}
//shuffle the cities+ coordinates- array
srand(time(NULL));
double tempn;
int pos1,pos2;
string temp;
for (int i = 0; i < 79; ++i){
pos1 = rand()%79;
pos2 = rand()%79;
temp = districts [pos1].city ;
districts [pos1].city = districts [pos2].city;
districts [pos2].city = temp;
tempn = districts [pos1].lat;
districts [pos1].lat = districts [pos2].lat ;
districts [pos2].lat = tempn;
tempn = districts [pos1].lng ;
districts [pos1].lng = districts [pos2].lng ;
districts [pos2].lng = tempn;
}
//game
double pos [4];
double distance [3];
int loop=0, answer=0, guess, total=0;
do {
double min=999999;
//cout - city + options
cout<< endl ;
cout << "Which city is the closest to "<< districts[loop].city<< "? Pick one of the following: " <<endl;
pos [1] = loop;
loop++ ;
cout << "1) " << districts[loop].city << endl;
pos [2]= loop;
loop++ ;
cout << "2) " << districts[loop].city << endl;
pos [3] = loop;
loop++ ;
cout << "3) " << districts[loop].city << endl;
pos [4] = loop;
loop++ ;
//calculate the difference+ find answer (which is the closest)
cout << "Write your selection: " ;
cin>> guess;
for (int x=1; x<4; x++) {
if (min>distance[x]) {
min= distance[x];
answer= x;
}
}
//if you guess the correct answer -
if (guess==answer) {
total++;
cout<< "Correct! The distances are: " << endl;
}
// if you guess the incorrect answer-
else {
cout<< "Incorrect! The distances are:" <<endl;
}
//witing the distances between 1 city
cout<< "1) " << districts[loop-3].city << "- " << distance [1] << endl;
cout<< "2) " << districts[loop-2].city << "- " << distance [2] << endl;
cout<< "3) " << districts[loop-1].city << "- " << distance [3] << endl << endl;
for (int u=0 ; u< 80; u++) {
cout << "-" ;
}
} while(loop<40) ;
//end of game
cout << endl << "Conratulations, you finished the game! Your score is: " << total << " out of 10" << endl;
int selection ;
cout <<endl << "Do you want to play again?" << endl << "1= Yes" << endl << "0= No" << endl;
cout << "Your selection: " ;
cin>> selection;
if (selection== 0) {
z= 0;
}
else {
z=1;
if (system("CLS")) system("clear") ;
}
} while (z==1);
}
**END OF CODE**
你不叫'distancecalc' ... – Jarod42
「作廢」是不是「功能」的同義詞 - 這是一個類型。 – molbdnilo