#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
float a;
float b;
float avg;
avg = ((3.5 * a) + (7.5 * b))/(3.5 + 7.5);
cout <<"AVG = ";
std::cout << std::fixed << std::setprecision(5) << avg << endl;
return 0;
}
答えて
したがって、これは基本的にコンパイラ固有のものです。あなたのコンパイラは、変数aとbを0に初期化しているようです。関数mainでaとbが初期化されていないというコードをコンパイルする際に、警告が表示されるのが理想です。あなたが別のコンパイラを試してみたら、それを0に割り当てることはできませんが、残っている値は何でも得なければなりません。
そのあなたが変数任意の値を持つとBを初期化していないので、0.00000を与えます。 はあなたのコンパイラは、初期化されていないローカル変数を使用して
「コンパイラは 'a'と' b'を '0'で初期化しています」というのは、これらの特定のオプションを持つこのコンパイラに固有のことです。ここで観察される行動は、いかなる基準によっても規定されていない – Garf365
ととBを初期化していることがあり未定義の動作(UB)を示しており、未定義の動作に何の適切な説明はありません。
タイプfloat
のグローバル変数は、コンパイラによってゼロに初期化されているので、次のコードは間違いなく0
#include <iostream>
#include <iomanip>
using namespace std;
float a;
float b;
float avg;
int main()
{
avg = ((3.5 * a) + (7.5 * b))/(3.5 + 7.5);
cout << "AVG = ";
std::cout << std::fixed << std::setprecision(5) << avg << endl;
return 0;
}
を生成します。
しかし、コンパイラが変数ローカル変数の変数を初期化してはならないため、操作前に変数が初期化されていないため、元のスニペットが正しくありません。規格は、 "未定義の動作"、およびいくつかのコンパイラが見つけることを呼び出し、エラーとして(例えばVisual StudioのC++コンパイラ):
エラー2エラーC4700:初期化されていないローカル変数 '' 使用source.cpp 15
エラー3エラーC4700:初期化されていないローカル変数 'B' 使用source.cpp 15
変数が初期化されていないので、15行目は、avg = ((3.5 * a) + (7.5 * b))/(3.5 + 7.5);
その0です。その後、未定義の動作が発生します。
未定義の動作がわからない場合は、それを要約すると、正常に構築されますが、実行可能ファイルは実行されません。
- 1. なぜ私のコードは0を出力していますか?
- 2. 次のコードは、出力内の '未定義' 与えるのはなぜ
- 3. 次のコードはなぜnullを出力しますか?
- 4. これは常に出力に0 0 0を与えますか?
- 5. 整数以外のすべての入力は、なぜ出力として13を与えますか?
- 6. 以下のコードは奇妙な出力を与えます.Explain
- 7. なぜ私のコードはNULLPOINTEREXCEPTIONを与えていますか?
- 8. 分割はループで0を与えます、なぜですか?
- 9. なぜこのコードは0〜297を出力しますが、0ではなく297を出力していますか?
- 10. 以下に書かれたコードは、次の出力を与えるトリプル
- 11. 二次ソルバー出力を与えるNaN
- 12. 組み立て簡単なコードは、次のコードを考えると、出力
- 13. このプログラムは出力を与え、なぜオーバーロードは、多型に
- 14. なぜこのPythonコードはランタイムエラー(NZEC)を与えますか?
- 15. なぜこのコードはセグメンテーションフォールトを与えますか?
- 16. 全く同じC++コードは別の出力を与えます
- 17. なぜscalaの部分関数が入力0に対して実行時エラーを与えていますか?
- 18. なぜ次のコードが100を出力するのですか?
- 19. として与えられた出力
- 20. 私のCコードはpのすべての入力に対して同じ出力を与えますか?
- 21. なぜこのプログラムの出力は2と0ですか?
- 22. R:read.tableの出力が与えられたときにas.vectorがベクトルを与えないのはなぜですか? read.tableをの出力に
- 23. なぜコンバイナ出力レコード= 0ですか?
- 24. なぜ私の関数は0(ゼロ)を出力していますか?
- 25. 私は次の出力を得るのはなぜ「** - 858993460 **」次のコードを使用しているとき
- 26. console.logとdocument.writeが同じコードに対して異なる出力を与えるのはなぜですか?両方のラインが異なる出力を与えるのはなぜ
- 27. なぜそれは常にゼロ出力を与えるのですか?
- 28. 次のC++コードではなぜこの出力が得られますか?
- 29. なぜこのコードは私に間違った答えを与えますか?
- 30. Cコードがsegfaultを与えるのはなぜですか?
未定義の振舞い – Danh
答えはすでにubであると説明しています。しかし、どんなアウトプットを期待しましたか? –