【问题标题】:program has stopped working程序已停止工作
【发布时间】:2014-04-09 18:28:39
【问题描述】:

我在使用 C++ 编译程序时遇到问题。我编写了一个程序,当我在程序中输入内容时,我会立即收到以下消息:

http://abload.de/image.php?img=hweteu89.png

翻译如下:

程序已停止工作

一个问题导致程序正常工作。如果有可用的解决方案,Windows 将关闭该程序并通知您。

这是我的源代码:

#include <cstdlib>
#include <iostream>
#include <fstream>

using namespace std;

int main(int argc, char *argv[])
{float SLN,R1,R2,R3,R4,R5,R6,R7,R8,R9,R10,R123,R23,R1234,R12345,R78,R678,R12345678,Rg,Uq=12+(SLN*0,1),Ig,I10,I9,I12345678,I12345,I678,U10,I6,U6,U78=I678*R78,I7,I8,U12345,U1234=U12345,U5=U12345,I1234,U123,U4,I5,U1=U123,I1,U2,U3,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,M,I2,I3=I2,I4=U4/R4,U7=U78,U8=U78,U9=I9*R9,Pg,Pg1;
cout<<"Bitte geben sie die Schülerlistennumer ein."<<endl;
cin>>SLN;//SLN eingeben



//Widerstandsvariablen definieren
R1=100;
R2=200;
R4=400;
R5=500;
R7=700;
R8=800;
R10=1000;

//Widerstände berechnen

R3=SLN*25;
R6=1000-(SLN*15);
R9=SLN*20;
R23=R2+R3;
R123=(R23*R1)/(R23+R1);
R1234=R123+R4;
R12345=(R1234*R5)/(R1234+R5);
R78=(R7*R8)/(R7+R8);
R678=R6+R78;
R12345678=R12345+R678;
Rg=1/((1/R12345678)+(1/R9)+(1/R10));

//Ströme berechnen
Ig=Uq/Rg;
I10=Uq/R10;
I9=Uq/R9;
I12345678=Uq/R12345678;
I12345=I12345678;
I678=I12345678;
I6=I678;
I7=U78/R7;
I8=U78/R8;
I1234=U1234/R1234;
I5=U5/R5;
I1=U1/R1;
I2=I12345678;


U10=I10*R10;
U6=I6*R6;
U12345=I12345*R12345;
U123=I1234*R123;
U4=I1234*R4;
U2=R2*I12345678;
U3=R3*I12345678;


//Leistungen berechnen
P1=I1*U1;
P2=I2*U2;
P3=I3*U3;
P4=I4*U4;
P5=I5*U5;
P6=I6*U6;
P7=I7*U7;
P8=I8*U8;
P9=I9*U9;
P10=I10*U10;
Pg=Uq*Ig;
Pg1=P1+P2+P3+P4+P5+P6+P7+P8+P9+P10;




//Variablen ausgeben(Spannung)
cout<<"Die spannung U1 betraegt"<<U1<<"Volt."<<endl;
cout<<"Die spannung U2 beträgt"<<U2<<"Volt."<<endl;
cout<<"Die spannung U3 betraegt"<<U3<<"Volt."<<endl;
cout<<"Die spannung U4 betraegt"<<U4<<"Volt."<<endl;     
cout<<"Die spannung U5 betraegt"<<U5<<"Volt."<<endl;
cout<<"Die spannung U6 betraegt"<<U6<<"Volt."<<endl;
cout<<"Die spannung U7 betraegt"<<U7<<"Volt."<<endl;
cout<<"Die spannung U8 betraegt"<<U8<<"Volt."<<endl;
cout<<"Die spannung U9 betraegt"<<U9<<"Volt."<<endl;
cout<<"Die spannung U10 betraegt"<<U10<<"Volt."<<endl;

//Variablen ausgeben (Strom)
cout<<"Der Strom I1 betraegt"<<I1<<"Ampere."<<endl;
cout<<"Der Strom I2 betraegt"<<I2<<"Ampere."<<endl;
cout<<"Der Strom I3 betraegt"<<I3<<"Ampere."<<endl;
cout<<"Der Strom I4 betraegt"<<I5<<"Ampere."<<endl;
cout<<"Der Strom I5 betraegt"<<I5<<"Ampere."<<endl;
cout<<"Der Strom I6 betraegt"<<I6<<"Ampere."<<endl;
cout<<"Der Strom I7 betraegt"<<I7<<"Ampere."<<endl;
cout<<"Der Strom I8 betraegt"<<I8<<"Ampere."<<endl;
cout<<"Der Strom I9 betraegt"<<I9<<"Ampere."<<endl;
cout<<"Der Strom I10 betraegt"<<I10<<"Ampere."<<endl;
cout<<"Der Strom Iges betraegt"<<Ig<<"Ampere."<<endl;

//Variable ausgeben(Leistung)
cout<<"Die Leistung P1 betraegt "<<P1<<"Watt."<<endl;
cout<<"Die Leistung P2 betraegt "<<P2<<"Watt."<<endl;
cout<<"Die Leistung P3 betraegt "<<P3<<"Watt."<<endl;
cout<<"Die Leistung P4 betraegt "<<P4<<"Watt."<<endl;
cout<<"Die Leistung P5 betraegt "<<P5<<"Watt."<<endl;
cout<<"Die Leistung P6 betraegt "<<P6<<"Watt."<<endl;
cout<<"Die Leistung P7 betraegt "<<P7<<"Watt."<<endl;
cout<<"Die Leistung P8 betraegt "<<P8<<"Watt."<<endl;
cout<<"Die Leistung P9 betraegt "<<P9<<"Watt."<<endl;
cout<<"Die Leistung P10 betraegt "<<P10<<"Watt."<<endl;
cout<<"Die Leistung Pges betraegt "<<Pg<<"Watt."<<endl;
cout<<"Die Leistung Pg1 betraegt "<<Pg1<<"Watt."<<endl;


//Maschenregel ausgeben
M=U5-U10+U8+U6;
cout<<"Bei der Machenregel kommt"<<M<<"heraus."<<endl;




    system("PAUSE");
    return EXIT_SUCCESS;
}

非常感谢有关如何解决此错误的帮助。

【问题讨论】:

  • 你应该学会使用循环-.-
  • 这如何帮助我摆脱 tghis 错误?
  • 这将使代码更容易阅读。这反过来可能更容易发现错误。
  • 是的,但我不知道如何做到这一点
  • 可怕的第一行中的所有这些分配都是未定义的行为。您正在获取未初始化变量的值并在计算或赋值中使用它们。

标签: c++


【解决方案1】:

cmets 是真的。你应该学会使用循环。

话虽如此,问题很可能是您使用了未初始化的变量。看到这个:

U78=I678*R78

I678 的值未初始化,但您正在使用它来计算 U78。我的 Visual Studio 还会报告这些变量在初始化之前被使用:

1>warning C4700: uninitialized local variable 'R78' used 1>warning C4700: uninitialized local variable 'U12345' used 1>warning C4700: uninitialized local variable 'U123' used 1>warning C4700: uninitialized local variable 'I2' used 1>warning C4700: uninitialized local variable 'U4' used 1>warning C4700: uninitialized local variable 'R4' used 1>warning C4700: uninitialized local variable 'I9' used 1>warning C4700: uninitialized local variable 'R9' used

您在执行除法的行中直接或间接使用这些,因此如果它们未初始化,程序将表现出未定义的行为。所以初始化你的变量,更好地格式化你的代码,这样一行的长度就不会是无数个字符,然后开始使用循环。

【讨论】:

  • 我不知道你的程序应该做什么。那是你的工作。你不能做的是使用未初始化的变量。现在,我列出的那些变量将具有任何随机值。可能是 0、-10、23432432.43243、-867867,谁知道呢。你不知道,我不知道,没有人知道你的程序每次运行时这些变量的值是多少。因此,请检查您对程序的要求,并在使用它们之前为这些变量指定一个有意义的值。
猜你喜欢
  • 2013-11-11
  • 1970-01-01
  • 1970-01-01
  • 2014-12-08
  • 2013-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多