当使用 std::CIN 输入结构时,它会出错

when inputting into a struct with std::cin it bugs out

本文关键字:出错 结构 输入 std CIN      更新时间:2023-10-16

我想制作一个代码来计算三角形点坐标的三角形面积

当用户输入例如 1 的数字时,它会写入 -1.5458E+037

我尝试了一些小调整,例如使用std::但根本没有工作

TBH 我是 C++ 的新手,所以我可能没有得到一些东西,我要求彻底解释一些事情

#include<iostream>
#include<math.h>
//#define str string
//using namespace std
int inputStarted=1;//being used in inputCo function
struct cords{
float x;
float y;
};
float distance(cords a,cords b){
float distanceX;
float distanceY;
distanceX= (a.x-b.x)*(a.x-b.x);
distanceY= (a.y-b.y)*(a.y-b.y);
return sqrt(distanceX+distanceY);
}
void area(cords A, cords B, cords C){
float ab =distance(A,B); 
float ac =distance(A,C);
float bc =distance(B,C);
float S=(ab+ac+bc)/2;
float Area=sqrt(S*(S-ab)*(S-ac)*(S-bc));
std::cout<<Area;
}
void printCords(cords a){
std::cout<<std::endl<<std::endl<<"x - "<<a.x<<std::endl<<std::endl<<"y - "<<a.y<<std::endl<<std::endl;
}
void inputCo(cords a){
if(inputStarted==1){
std::cout<<"input your 1-st point's X position/coordinate  -  ";// = 1
std::cin>>a.x;
std::cout<<"input your 1-st point's Y position/coordinate  -  ";// = 4
std::cin>>a.y;
std::cout<<std::endl;
}
if(inputStarted==2){
std::cout<<"input your 2-nd point's X position/coordinate  -  ";// = 5
std::cin>>a.x;
std::cout<<"input your 2-nd point's Y position/coordinate  -  ";// = 8
std::cin>>a.y;
std::cout<<std::endl;
}
if(inputStarted==3){
std::cout<<"input your 3-rd point's X position/coordinate  -  ";// = 3
std::cin>>a.x;
std::cout<<"input your 3-rd point's Y position/coordinate  -  ";// = 6
std::cin>>a.y;
std::cout<<std::endl;
}
inputStarted++;
}
int main(){
cords A;
cords B;
cords C;
inputCo(A);
inputCo(B);
inputCo(C);
printCords(A);
printCords(B);
printCords(C);
area(A,B,C);    
}```
void inputCo(cords a){

您通过副本传递参数,因此仅修改复制的值。要修改原始值,请改为通过引用传递:

void inputCo(cords& a){

其他函数不会修改参数,因此您可以通过复制传递。

您正在将 coord 的副本传递到被修改的输入函数中,当函数退出时,该副本不再是您正在使用的副本。

您需要传入指针或对坐标的引用,以便可以在不复制的情况下对其进行修改

类似于将输入函数更改为:

void inputCo(cords &a)