2016-12-28 6 views
-5

最初の値を入力して処理を続行しようとすると、スクリーンショットにエラーが表示される理由を解決できません。C++ "Program.exeが動作を停止しました"

エラーは以下のコードでのみ発生します。

助けていただけたら幸いです!

Error screenshot

//Darbas40 
#include <io.h> 
#include <iostream> 
#include <iomanip> 
#include <cmath> 

using namespace std; 

int main() 

{ 

int n, 
    u, 
    m, 
    ms, 
    v, 
    vs, 
    i; 
double vidvaikinu, 
     vidmerginu; 

n = 7; m = 0; v = 0; ms = 0; vs = 0; 

for (i = 1; i <= n; i++) 
{ 
    wcout << "Iveskite mokiniu ugius: "; cin >> u; 
    if (u > 0) 
    { 
     m++; 
     ms = ms + u; 
    } 
    else if (u < 0) 
    { 
     v++; 
     vs = vs + u; 
    } 
    vidmerginu = ms/m; 
    vidvaikinu = fabs(vs/v); 
    } 

    wcout << " " << endl; 
    wcout << "vidvaikinu = " << vidvaikinu << ", vidmerginu = " << vidmerginu << "." << endl; 

return 0; 
} 
+0

ようこそスタックオーバーフロー。 [The Tour](http://stackoverflow.com/tour)を読み、[ヘルプセンター](http://stackoverflow.com/help/asking)の資料を参考にしてください。ここに聞いてください。 –

+1

'v'はゼロで除算を起こしています。そのため、書式設定やスタイルが悪いためにコードを読むのが非常に難しいという点以外は、1行に1つの変数*を宣言して初期化する必要があります。 – CoryKramer

+5

このような問題を解決する適切なツールは、デバッガです。スタックオーバーフローを尋ねる前に、コードを一行ずつ進める必要があります。詳しいヘルプは、[小さなプログラムをデバッグする方法(Eric Lippert)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)を参照してください。最低限、問題を再現する[最小、完全、および検証可能](http://stackoverflow.com/help/mcve)の例と、その問題を再現するためのデバッガ。 –

答えて

1

u <= 0場合は、ゼロ除算エラーを取得します:m0に設定し、インクリメントされていないため

vidmerginu = ms/m; 

そしてにおけるゼロ除算エラーu >= 0場合:

vidvaikinu = fabs(vs/v); 

v0に設定され、増分されないためです。

関連する問題