Es gibt ein paar große Probleme mit Ihrem Code.
Zuerst ist die Syntax for (float i = 0; i > 10, i++;)
völlig falsch. Es kompiliert, aber das ist nur ein Zufall. Der andere Befehl in der for-Schleifen-Kontrollstruktur sollte durch Semikolons getrennt sein (;
), nicht Kommas (,
). Der korrekte Code wäre dann for (float i = 0; i > 10; i++)
. Übrigens, Sie haben einen Tippfehler gemacht, ich glaube, Sie meinten for (float i = 0; i < 10; i++)
(sonst läuft die for-Schleife nie, da i
auf 0 initialisiert wird und 0 > 10
von Anfang an falsch ist).
Zweitens initialisieren Sie die Variable i
zweimal: einmal mit float i;
und einmal in der for-Schleife. Das sollte nicht kompiliert werden, obwohl dies bei einigen Compilern der Fall ist. Es gibt zwei Möglichkeiten, wie Sie vorgehen. Die erste Option ist die Variable außerhalb der for-Schleife zu erklären und es nur zuweisen, ohne sie in der for-Schleife zu initialisieren:
float i;
for(i = 0; i < 10; i++){
//some stuff
}
Die zweite Option ist es einfach für Schleife in die erklären, wie Sie in der ersten tat Schleife:
for(float i = 0; i < 10; i++){
//some stuff
}
ein weiterer Fehler, den Sie i
als float
zu erklären gemacht ist, und versuchen Sie dann, den Zugang dotName[i]
. Was auch immer Sie in die Klammern setzen, muss vom Typ int
oder etwas ähnlichem sein (unsigned int
, long
, usw.). Setzen Sie eine float
Variable in diese Klammern wird nicht einfach so kompiliert. Wenn Sie ein Array mit einem float
indizieren möchten, müssen Sie dem Compiler mitteilen, dass Sie es wie folgt in ein int
konvertieren möchten: dotName[(int)i]
oder dotName[int(i)]
. Dies wird als Besetzung bezeichnet. In Ihrem Fall würde ich jedoch empfehlen, i
als int
zu deklarieren.
Auch ist float(dotX < 10);
völlig falsch, ich verstehe nicht wirklich, was Sie dort zu tun versuchen. Ich denke, Sie wollten float(dotX[i] < 10);
tun, aber das macht immer noch keinen Sinn. Was Sie dort tun würden, würde eine bool
in eine float
konvertieren und dann nichts mit dem Ergebnis tun. Das kompiliert und ist nicht falsch, aber ist völlig nutzlos. Wie gesagt, ich verstehe nicht, was Sie dort machen wollen.
Auch broi = broi++;
ist korrekt, aber nutzlos. broi++;
ist genug. Der Operator ++
inkrementiert broi
um eins und gibt dann das Ergebnis zurück.Was die ++
Betreiber intern tut, ist im Grunde diese:
int operator++(int &x){
x = x + 1;
return x;
}
So erhöht es bereits die Variable automatisch, ohne dass Sie etwas zu tun. Was Sie getan haben, ist das gleiche wie dies zu tun:
broi = broi + 1;
broi = broi;
Hier stellt die erste Zeile den ++
Operator und die zweite Linie stellt den =
Operator. Es ist klar, dass die zweite Zeile nutzlos ist, also kannst du sie einfach entfernen. Auf die gleiche Weise können Sie in Ihrem Code broi =
entfernen und einfach broi++;
verlassen.
Sie haben auch ein paar Dinge, die nicht empfohlen werden, aber funktionieren gut, da der C++ - Standard sie unterstützt.
Zuallererst ist using namespace std;
schlechte Praxis. Es wird empfohlen, es wegzulassen und std::
vor cin
, cout
und endl
hinzuzufügen. Wenn Sie wissen wollen, warum using namespace std;
schlechte Praxis ist, ist es gut erklärt . Allerdings muss ich zugeben, dass ich persönlich immer noch using namespace std;
benutze, da ich denke, dass es einfacher ist.
Zweitens, die main
Funktion soll 0 zurückgeben, so wird empfohlen, return 0;
am Ende der main
Funktion hinzuzufügen. Der Rückgabewert der main
-Funktion sagt aus, was das Programm geschlossen hat. Der Wert 0 bedeutet, dass das Programm geschlossen wurde, als es sollte. Alle anderen Werte bedeuten, dass das Programm abgestürzt ist. Eine vollständige Liste dessen, was jeder Rückgabewert bedeutet, ist verfügbar here. Beachten Sie, dass C++ das Auslassen von return 0;
unterstützt und die meisten Compiler fügen es automatisch hinzu, wenn es weggelassen wird, aber es wird trotzdem empfohlen, es zu haben. Außerdem unterstützt C nicht das Auslassen von return 0;
und in C wird es zurückgeben, was auch immer passiert, so dass es so aussah, als wäre das Programm abgestürzt, als es normal beendet wurde.
Auch #include <stdio.h>
ist C und obwohl es in C++ funktioniert, wird es nicht empfohlen. In C++ ist es besser, #include <cstdio>
zu verwenden. Alle Standardbibliotheken, die mit .h
in C enden, können in C++ verwendet werden, indem .h
entfernt und am Anfang ein c
hinzugefügt wird. Das ist auch der Fall mit cmath
: in C wäre es #include <math.h>
und in C++ ist es #include <cmath>
.
wäre eine gute Version Ihres Codes daher:
#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;
}
}
Willkommen Überlauf zu stapeln. Bitte nehmen Sie sich die Zeit, [The Tour] (http://stackoverflow.com/tour) zu lesen und beziehen Sie sich auf das Material aus der [Hilfe] (http://stackoverflow.com/help/asking), was und wie Sie können fragen Sie hier. –
@ πάνταῥεῖ Ich habe tatsächlich versucht, nach etwas ähnlichem zu graben, damit ich mir helfen kann, aber leider konnte ich es nicht finden. Ich habe die Hilfe durchsucht, bevor ich sie gepostet habe, aber ich habe keine Informationen zu meinem Problem mit dem Koordinatensystem gefunden, sondern nur, wie man ein solches erstellt. :/ –
Sie sollten lesen, wie Sie eine gute Frage stellen und auf welche Weise Sie verbessert werden können. Danach [bearbeiten] Sie Ihre Frage, um es besser zu machen. –