你的代码有几个大问题。
首先,语法for (float i = 0; i > 10, i++;)
是完全错误的。它编译,但这只是一个巧合。 for循环控制结构中的不同命令应该用分号分隔(;
),而不是逗号(,
)。正确的代码将是for (float i = 0; i > 10; i++)
。顺便说一下,你犯了一个错字,我认为你的意思是for (float i = 0; i < 10; i++)
(否则从i
初始化为0,而0 > 10
从一开始就是错误的,for循环从不运行)。
其次,你正在初始化变量i
两次:一次用float i;
,一次在for循环中。这不应该编译,虽然它有一些编译器。有两种选择如何做。第一个选项是声明的变量之外循环,只是分配给它没有初始化它的循环:
float i;
for(i = 0; i < 10; i++){
//some stuff
}
第二个选择是简单地宣布它在for循环,你在第一次做循环:
for(float i = 0; i < 10; i++){
//some stuff
}
所做的声明i
作为float
,然后尝试访问dotName[i]
另一个错误。无论你把什么放在括号内,都必须是int
或类似的东西(unsigned int
,long
等)。在这些括号内放置一个float
变量不会像这样编译。如果你想用float
索引一个数组,你需要告诉编译器你想将它转换为如下所示的int
:dotName[(int)i]
或dotName[int(i)]
。这被称为演员。不过,就你的情况而言,我建议只是宣布i
为int
。
此外,float(dotX < 10);
是完全错误的,我不明白你在那里想要做什么。我认为你的意思是做float(dotX[i] < 10);
,但那还是没有任何意义。你会在那里做什么会将bool
转换为float
,然后对结果无所作为。编译并没有错,但是完全没用。正如我所说,我不明白你想在那里做什么。
另外,broi = broi++;
是正确的,但没用。 broi++;
就够了。 ++
运算符将broi
自增1,然后返回结果。什么++
运营商内部确实基本上是这样的:
int operator++(int &x){
x = x + 1;
return x;
}
所以它已经没有你做任何事情自动递增变量。你所做的是一样的这样做:
broi = broi + 1;
broi = broi;
在这里,第一线代表++
运营商和第二线表示=
操作。很明显,第二行是无用的,所以你可以删除它。以同样的方式,在您的代码中,您可以删除broi =
,只需简单地将broi++;
。
你也做了一些不被推荐的东西,但由于C++标准支持它们,所以工作得很好。
首先,using namespace std;
是不好的做法。建议省略它,并在cin
,cout
和endl
前加上std::
。如果你想知道为什么using namespace std;
是不好的做法,很好解释。不过,我必须承认,我个人仍然使用using namespace std;
,因为我认为它更简单。
其次,main
函数应该返回0,因此建议在main
函数的末尾添加return 0;
。 main
函数的返回值告诉程序关闭的是什么。值0意味着程序在应该时关闭。任何其他值意味着该程序崩溃。每个返回值意味着可用的完整列表here。请注意,C++支持省略return 0;
,如果省略,大多数编译器会自动添加它,但仍建议使用它。此外,C不支持省略return 0;
,并且在C中它将返回内存中发生的任何事情,使得它看起来像程序在正常结束时崩溃。
此外,#include <stdio.h>
是C,虽然它在C++中工作,但不建议。在C++中,最好使用#include <cstdio>
。以C语言结尾为.h
的所有标准库都可以在C++中使用,方法是删除.h
并在开头添加c
。 cmath
也是这种情况:在C中,它将是#include <math.h>
,在C++中,它是#include <cmath>
。
你的代码的一个很好的版本,因此将会:
#include <iostream>
#include <cmath>
#include <cstdio>
int main(){
int dotX[23]; //tri masiva
int dotY[23];
char dotName[23];
for (int i = 0; i < 23; i++){ // Cikal za vavejdane na masivite
std::cout << "Abscisa \t" << i + 1 << std::endl;
std::cin >> dotX[i];
std::cout << "Ordinata \t" << i + 1 << std::endl;
std::cin >> dotY[i];
std::cout << "Ime na tochkata" << std::endl;
std::cin >> dotName[i];
if (i >= 1){ //IF operatora i cikula za obhozhdane na masiva i presmqtane na distanciite
bool flag = true;
while (flag){
double distance = sqrt(pow(dotY[i] - dotY[i - 1], 2) + pow(dotX[i] - dotX[i - 1], 2)); //Formula za presmqtane na razstoqniqta
if (distance <= 6) {
char broi;
broi++;
std::cout << "abscisa \t" << i + 1 << std::endl;
std::cin >> dotX[i];
std::cout << "ordinata \t" << i + 1 << std::endl;
std::cin >> dotY[i];
}
else{
flag = false;
}
}
}
}
for (int i = 0; i < 10; i++){
float(dotX[i] < 10); //Note that I don't understand what you're trying to do here, so I just changed it to something that compiles
std::cout << dotName[i] << std::endl;
}
}
欢迎堆栈溢出。请花些时间阅读[The Tour](http://stackoverflow.com/tour),并参阅[帮助中心](http://stackoverflow.com/help/asking)中的资料,了解您可以在这里问。 –
@πάνταῥεῖ我实际上尝试挖掘类似的东西,所以我可以帮助自己,但不幸的是我找不到它。我在发布之前搜索了帮助中心,但我没有找到关于我的坐标系问题的任何信息 - 只有如何创建一个。 :/ –
你应该阅读如何提出一个好问题,以及在哪些方面可以改进你的问题。之后[编辑]你的问题,使其更好。 –