你的代碼有幾個大問題。
首先,語法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)中的資料,瞭解您可以在這裏問。 –
@πάνταῥεῖ我實際上嘗試挖掘類似的東西,所以我可以幫助自己,但不幸的是我找不到它。我在發佈之前搜索了幫助中心,但我沒有找到關於我的座標系問題的任何信息 - 只有如何創建一個。 :/ –
你應該閱讀如何提出一個好問題,以及在哪些方面可以改進你的問題。之後[編輯]你的問題,使其更好。 –