Есть несколько больших проблем с вашим кодом.
Прежде всего, синтаксис for (float i = 0; i > 10, i++;)
полностью ошибочен. Он компилируется, но это просто совпадение. Другая команда в структуре управления циклом цикла должна быть разделена точкой с запятой (;
), а не запятыми (,
). Тогда правильный код будет for (float i = 0; i > 10; i++)
. Кстати, вы сделали опечатку, я думаю, что вы имели в виду for (float i = 0; i < 10; i++)
(иначе цикл for никогда не запускается, так как i
инициализируется до 0, а 0 > 10
является ложным с самого начала).
Во-вторых, вы инициализируете переменную i
дважды: один раз с float i;
и один раз в цикле for. Это не должно компилироваться, хотя с некоторыми компиляторами это происходит. Есть два варианта, как это сделать. Первый вариант заключается в объявлении переменной вне для цикла и просто назначить его без его инициализации в течение цикла:
float i;
for(i = 0; i < 10; i++){
//some stuff
}
второй вариант просто объявить его в цикл, как вы делали в первом цикл:
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
, а затем возвращает результат.Что оператор ++
делает внутренне основном это:
int operator++(int &x){
x = x + 1;
return x;
}
Так это уже автоматически увеличивает переменную без необходимости делать что-либо. То, что вы сделали это так же, как это сделать:
broi = broi + 1;
broi = broi;
Здесь первая строка представляет собой оператор ++
и вторая строка представляет собой оператор =
. Понятно, что вторая строка бесполезна, поэтому вы можете просто удалить ее. Точно так же в вашем коде вы можете удалить broi =
, оставив просто broi++;
.
Вы также сделали несколько вещей, которые не рекомендуется, но отлично работают, поскольку стандарт C++ поддерживает их.
Прежде всего, using namespace std;
- плохая практика. Рекомендуется опустить его и добавить std::
перед cin
, cout
и endl
. Если вы хотите знать, почему using namespace std;
- это плохая практика, это хорошо объяснено. . Тем не менее, я должен признать, что я лично все еще использую using namespace std;
, так как я думаю, что это проще.
Во-вторых, функция main
должна возвращать 0, поэтому рекомендуется добавить return 0;
в конце функции main
. Возвращаемое значение функции main
сообщает, что запустило программу. Значение 0 означает, что программа закрыта, когда предполагалось. Любые другие значения означают, что программа разбилась. Полный список значений каждого возвращаемого значения доступен here. Обратите внимание, что C++ поддерживает исключение return 0;
, и большинство компиляторов добавляет его автоматически, если оно опущено, но по-прежнему рекомендуется его использовать. Кроме того, C не поддерживает опускание return 0;
, а в C он вернет все, что происходит в памяти, что делает его похожим на то, что программа потерпела крах, когда она закончилась нормально.
Кроме того, #include <stdio.h>
является C, и хотя он работает на C++, это не рекомендуется. В C++ лучше использовать #include <cstdio>
. Все стандартные библиотеки, которые заканчиваются .h
в C, могут быть использованы в 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;
}
}
Добро пожаловать на Stack Overflow. Пожалуйста, найдите время, чтобы прочитать [The Tour] (http://stackoverflow.com/tour) и обратитесь к материалу из [Справочного центра] (http://stackoverflow.com/help/asking) о том, что и как вы можете спросите здесь. –
@ πάνταῥεῖ Я действительно пытался копать что-то подобное, поэтому я могу помочь себе, но, к сожалению, я не смог его найти. Прежде чем отправлять его, я искал справочный центр, но я не нашел никакой информации о моей проблеме с системой координат - только как ее создать. :/ –
Вы должны прочитать, как задать хороший вопрос и каким образом ваши улучшения могут быть улучшены. После этого отредактируйте свой вопрос, чтобы сделать его лучше. –