【问题标题】:Unknown error on C++, error: expected primary expression before ';' tokenC++ 上的未知错误,错误:“;”之前的预期主表达式令牌
【发布时间】:2012-04-19 14:11:53
【问题描述】:

C++ 上的未知错误,错误:';' 之前的预期主表达式令牌。 这是我用 C++ 编写的代码:

 #include <iostream>
 #include <math.h>
 #include <stdio.h>
 #define G 6.674E-11
 using namespace std;

 int main()
 {
 //Ms = Mass of sun, Me = Mass of Earth, Fg = Gravitational force between them, As =                                   Acceleration of Sun, Ae = Acceleration of Earth, Ve_x
 // = initial velocity of Earth in x direction, Ve_y = initial velocity of Earth in y          direction, Vs_x = initial velocity of the Sun in x direction
 // Vs_y = initial velocity of sun in y direction, t = time, F = Gravitational force   `    between the two bodies.

    float Ms, Me, Fg, As, Ae, Ve_x, Ve_y, Vs_x, Vs_y, pos_E, pos_S, r_x, r_y, r, t;
    float S_dist;
    float E_dist;
    float F;
    float Ve[2];
    float Vs[2];
    float pe[2];
    float ps[2];


  FILE *fileptr;

    cout <<"Enter mass of the Sun in kg\n";
    cin >> Ms;
    cout <<"Enter mass of the earth in kg\n";
    cin >> Me;
    cout <<"Enter intial velocity of the sun in x direction in m/s\n";
    cin >> Vs[0];
    cout <<"Enter intial velocity of the sun in y direction in m/s\n";
    cin >> Vs[1];
    cout <<"Enter intial velocity of the earth in x direction in m/s\n";
    cin >> Ve[0];
    cout <<"Enter intial velocity of the earth in y direction in m/s\n";
    cin >> Ve[1];
    cout <<"Enter intial position of the sun in x component\n";
    cin >> ps[0];
    cout <<"Enter intial position of the sun in y direction\n";
    cin >> ps[1];
    cout <<"Enter intial position of the earth in x direction\n";
    cin >> pe[0];
    cout <<"Enter intial position of the earth in y direction\n";
    cin >> pe[1];


  for (t=0; t<30000; t+1)
 {
  float E_dist;
  float S_dist;
  float F;

    E_dist=sqrt( ((pe[0]-pe[0])*(pe[0]-pe[0])) + ((pe[1]-pe[1])*(pe[1]-pe[1])) );
    S_dist=sqrt( ((ps[0]-ps[0])*(ps[0]-ps[0])) + ((ps[1]-ps[1])*(ps[1]-ps[1])) );

    r_x=( (pe[0]-pe[0]) - (ps[0]-ps[0]) );
    r_y=( (pe[1]-pe[1]) - (ps[1]-ps[1]) );
    r= sqrt( (r_x)*(r_x) + (r_y)*(r_y) );

    F=(G*Me*Ms)/(r*r);

    Ae = F/Me;
    As = F/Ms;

    Ve_x = Ve[0];
    Ve_y = Ve[1];
    Vs_x = Vs[0];
    Vs_y = Vs[1];
    }
    cout<<"At time "<<t<<":\n The position of the Sun is "<<S_dist<<"\n The position of   the Earth is "<<E_dist
    <<"\n The acceleration of the Sun is "<<As<<" \n The acceleration of the Earth is "<<Ae<<" \nThe velocity of the Sun in the x direction is "
    <<Vs_x<<" \n The velocity of the Sun in the y direction is "<<Vs_y<<" \n The velocity of the Earth in the x direction is "<<Ve_x<<
    " \n The velocity of the Earth in the y direction is "<<Ve_y<<" \n The gravitational force between the Sun and the Earth is "<<F<<; // ERROR OCCURRED HERE.

} 

如果有任何帮助,将不胜感激,谢谢。

【问题讨论】:

  • 这是错误的(在你的循环中); t+1。这不会改变t 的值。它评估表达式并将结果丢弃。你有一个无限循环。还有……循环索引变量的浮点数?
  • 这一定是 Google 上搜索次数最多的问题之一(仅 +700 万条结果)。你会认为编译器编写者只会告诉你哪里出了问题。
  • 你好@Pat。欢迎来到堆栈溢出。感谢您发布您的程序,以便我们找到错误。如果您首先删除所有没有错误的行,这将更有帮助,留下一个小得多的程序供我们检查。有关此调试技术的更多信息,请参阅sscce.org。再次,欢迎来到 SO!

标签: c++


【解决方案1】:

我认为错误在于你的最后一行是这样结束的:

<<F<<;

请注意,&lt;&lt; 运算符仅应用于一个参数。你的意思是写这样的东西吗?

<<F<<endl;

对于它的价值,我会强烈建议将该输出行拆分为多行以清楚起见。您现在拥有的内容是正确的,但是阅读起来非常困难。重写为

cout << "At time " <<t<<":\n The position of the Sun is "<<S_dist<<"\n";
     << " The position of   the Earth is "<<E_dist << "\n";
     << "The acceleration of the Sun is "<<As<<"\n"
     << "The acceleration of the Earth is "<<Ae<<"\n";
     << "The velocity of the Sun in the x direction is "<<Vs_x<<" \n";
     << "The velocity of the Sun in the y direction is "<<Vs_y<<" \n";
     << "The velocity of the Earth in the x direction is "<<Ve_x<< "\n";
     << "The velocity of the Earth in the y direction is "<<Ve_y<<" \n";
     << "The gravitational force between the Sun and the Earth is "<<F<<;

会使这个错误更容易被发现,因为行号信息会更有用。另外,我建议在 &lt;&lt; 运算符之间添加空格,以使其更易于阅读。

【讨论】:

  • 额外的 cout 不是必需的,仅供参考,如果没有的话会更具可读性。
  • 同意,我只保留运算符并忘记所有不同的语句。
  • @0A0D- 感谢您的反馈。固定。
【解决方案2】:

templatetypedef已经指出编译错误,但是代码中还有一个问题: for 循环是无限的:

for (t=0; t<30000; t+1)

应该是:

for (t=0; t<30000; t++)

或者因为tfloat,基于Is using increment (operator++) on floats bad style?

for (t = 0; t < 30000; t+=1.0f)

【讨论】:

  • 这是真的,但 OPs 错误是编译时错误。无论如何+1(即使这不是问题的答案)
  • 很好的发现,但没有解决他的问题(本可以变成从这个问题衍生的另一个问题)+1
  • @Marlon,我知道它没有回答这个问题。引用了一个确实纠正了编译器错误的答案。
  • pfft,无论如何,我首先注意到它并留下了评论:D
  • @EdS.,从未注意到您的评论,当时正在输入此内容。
【解决方案3】:

您的第一个语法错误是因为在语句末尾有另一个 &lt;&lt; cout&lt;&lt;F&lt;&lt;; 只需将其更改为 cout&lt;&lt;F; 除非您要打印另一个 var 或者您想使用 endline,例如:cout&lt;&lt;F&lt;&lt;endl;

你还有一个语法错误! 你的 main 返回 int 但你最后没有返回任何东西:

return 0;

另一个非常非常非常重要的问题是关于变量F

逻辑错误!!!

int main()
{
....
  float S_dist; //real S_dist !!!
  float E_dist; //real E_dist !!!
  float F;      //real F !!!
  for (t=0; t<30000; t++)
  {

     float F; // just exists in for!!!
     float E_dist; //just exists in for!!!
     float E_dist; //just exists in for!!!
  ....
     F=(G*Me*Ms)/(r*r); //changing local F, which just exists in for
     E_dist=sqrt( ((pe[0]-pe[0])*(pe[0]-pe[0])) + ((pe[1]-pe[1])*(pe[1]-pe[1])) );
     S_dist=sqrt( ((ps[0]-ps[0])*(ps[0]-ps[0])) + ((ps[1]-ps[1])*(ps[1]-ps[1])) );
  }
  cout<<F<<E_dist<<S_dist; //this prints the main vars!
  return 0;
} 

请务必阅读更多有关局部变量的信息。 请记住,t+1 根本不会改变 t!你应该在for 语句的最后部分写t++t+=1!除非你会得到一个无限循环,否则你的t 根本不会增长!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-23
    • 2017-02-01
    • 1970-01-01
    • 2013-06-08
    • 2012-10-30
    • 1970-01-01
    相关资源
    最近更新 更多