本帖最后由 superbe 于 2019-9-12 19:53 编辑
#include <iostream>
#include <string>
#include <fstream>
#include <cmath>
#include <sstream>
#include <iomanip> //后面输出用了setprecision(4),就要用这个库
//#define _USE_MATH_DEFINES
#define M_PI 3.14159 //添加了这行
using namespace std;
void polar2Rect(double r, double theta, double &dx, double &dy){ //theta和r可以调换位置,相应调用函数的参数也调换下,保证对应就可以。这里调换过了
theta = (M_PI*(theta-90))/180;
dx+= cos(theta)*r; //这行原来是dx=cos(theta)*r;不对,看说明应该是累加计算
dy+= sin(theta)*r; //这行原来是dy=sin(theta)*r;
}
int main() {
ifstream infile("hw2e.txt"); //infile是一个ifstream类的对象名(有点变量的意思),可以改,后面用到infile的都相应改
string line; //定义一个string类的对象,这个类是用来处理字符串的,后面从文件读一行到line
double dx=0,dy=0; //添加了初始化0
if(!infile.is_open()){
cout<<"cant not open the file"<<'\n';
return -1; //main函数返回值是给系统的,程序中用不到,返回多少都可以没关系
}
while(getline(infile,line)){ //从文件中读取一行到line中
string b1; //string类的对象b1
string b2; //string类的对象b2
stringstream ss(line); //字符串流的对象ss,用line"初始化",支持字符串输入输出操作
ss>>b1; //从ss输入一个值到b1(字符串形式的数值)
ss>>b2; //从ss输入一个值到b2
double theta=stod(b1); //stod()函数把字符串转换成double,这里把b1转换成double型给r
double r = stod(b2); //把b2转换成double给theta
if(r<0 || theta<0){ //这里if条件原来是r<0 && theta<0,而看说明应该是r或theta为负
cout<< "Robot has reached final destination." <<'\n';
}
else{
polar2Rect(r,theta,dx,dy); //这里theta和r也相应调换过了
cout<< "New robot position (X,Y): " <<"("<<fixed<<setprecision(4)<<dx<<","<<dy<<")"<<'\n'; //增加了<<fixed<<setprecision(4),为了使输出整齐,好看些
}
}
infile.close();
return 0;
}
代码修改的地方注释里说明了。我也只能理解到这个程度了。