コードにはいくつか大きな問題があります。
まず、構文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
は最初からfalseです。
第2に、変数i
を2回:float i;
で1回、forループで1回初期化しています。それはコンパイルするべきではありませんが、コンパイラによってはコンパイルするべきではありません。実行方法には2つのオプションがあります。最初のオプションは、forループの外で変数を宣言し、ちょうどループのために、それを初期化せずにそれを割り当てることです:
float i;
for(i = 0; i < 10; i++){
//some stuff
}
二番目のオプションは、あなたが最初に行ったように、単純にループのためにそれを宣言することですループ:
for(float i = 0; i < 10; i++){
//some stuff
}
あなたが作ったもう一つのミスがfloat
としてi
を宣言してからアクセスdotName[i]
に試してみることです。角かっこの中に入れたものは、タイプint
またはそれに類するもの(unsigned int
、long
など)でなければなりません。これらの括弧の中にfloat
変数を入れることは、まるでそれと同様にコンパイルされません。アレイをfloat
でインデックスする場合は、またはdotName[int(i)]
のように、int
に変換することをコンパイラに伝える必要があります。これはキャストと呼ばれます。しかし、あなたの場合、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;
は、最初の行は++
オペレータを表し、2行目は=
演算子を表します。 2行目は役に立たないので、削除するだけです。同様に、コード内でbroi =
を削除して、単純にbroi++;
のままにすることができます。
また、推奨されていないものもありましたが、C++標準でサポートされているのでうまく動作します。
まず、using namespace std;
は悪い習慣です。それを省略し、cin
の前にstd::
を追加し、cout
とendl
を追加することをお勧めします。 using namespace std;
が悪い習慣である理由を知りたい場合は、とよく分かります。しかし、私は個人的にはusing namespace std;
を使っていることを認めなければなりません。
第2に、main
関数は0を返すと仮定されているので、main
関数の最後にreturn 0;
を追加することをお勧めします。 main
関数の戻り値は、何がプログラムを終了させたかを示します。値0は、プログラムが想定されたときに終了したことを意味します。他の値は、プログラムがクラッシュしたことを意味します。戻り値の意味の完全なリストはhereです。 C++はreturn 0;
を省略することをサポートしており、ほとんどのコンパイラは省略されてもそれを自動的に追加しますが、まだそれを持っていることが推奨されます。また、Cはreturn 0;
を省略することをサポートしておらず、メモリ内に何があっても返すので、プログラムが正常に終了したときにクラッシュしたように見えます。
また、#include <stdio.h>
はCで、C++でも動作しますが、お勧めできません。 C++では、#include <cstdio>
を使用する方が良いでしょう。 C言語で.h
で終わるすべての標準ライブラリは、.h
を削除し、最初にc
を追加することで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)の資料を参考にしてください。ここに聞いてください。 –
@πάνταῥεῖ私は実際には何かのために掘削を試みたので、私は自分自身を助けることができますが、残念ながら私はそれを見つけることができませんでした。投稿する前にヘルプセンターを検索しましたが、自分の問題に関する座標システムの情報は見つかりませんでした。作成方法のみでした。 :/ –
良い質問をする方法と、どのように改善するのかを読むべきです。その後、それをより良くするためにあなたの質問を編集してください。 –