C程序出错

时间:2009-03-25 06:25:08

标签: c gcc mingw

while(((long)(1000*ratio*((long)clock()-(long)t0))%100)/1000)<Data_Read_Rate);

以上行产生以下错误: “&lt; token”之前的语法错误。

为什么会出现这个错误?

我使用MINGW32进行开发(GCC编译器)。

...谢谢

7 个答案:

答案 0 :(得分:8)

左边有一个paren失踪。这将解析:

while ((((long)(1000*ratio*((long)clock()-(long)t0))%100)/1000)<Data_Read_Rate);

除了解析问题:

  • 使用突出显示匹配括号的编辑器:)
  • 为什么不计算数据读取率下降到足够的时间,并调用sleep()?这对处理器来说更好。

另外,考虑到你使用%运算符,你可能希望像这样放置额外的paren(我假设 ratio 不是整数),因为%运算符需要整数操作数:

while (((long)(1000*ratio*(((long)clock()-(long)t0))%100)/1000)<Data_Read_Rate);

(但这在语义层面上是否有意义?切碎它!)

答案 1 :(得分:4)

你有太多的右括号。

另外,你的逻辑是如此漫长而深刻,以至于我并不想弄清楚代码应该是什么。只是vim突出显示红色的最后),这意味着它不匹配。我建议你考虑使用一些中间变量,并通过将它扩展为几行而不是一行来简化该语句的逻辑。

答案 2 :(得分:3)

<圆括号不匹配。顺便说一句,我实际上会编辑代码并将其分解为多个语句,以使其更具可读性。

答案 3 :(得分:2)

因为编译器对人类读者的代码感到困惑吗? [颤动]

空格和换行符是免费的,并且可以很好地添加到可读性中。

    while ( ( (long)( 1000 * ratio * ( (long)clock() - (long)t0 ) ) % 100 ) / 1000 ) < Data_Read_Rate );

你也可以取消clock()和t0的(长)演员阵容(假设它们都是int)。在减法之前投射它们不会改变结果。要进行整个计算,只需将一个的参数设置为long就足够了 - 最简单的方法是转换文字1000:

while ( ( ( 1000l * ratio * ( clock() - t0 ) ) % 100 ) / 1000 ) < Data_Read_Rate );
嗯......等等。你取一些东西,模数为100(产生一个0到99之间的数字),然后除以1000?你的结果总是0 ......

哦,你忘记了你的括号。 ; - )

答案 4 :(得分:1)

如前所述,您的括号不匹配。

使用这样的表达式,使用一些临时变量来简化语句几乎总是更好。但是,以下提示可能有所帮助。

  1. 计算括号,为每个“(”并为每个减去1“增加1)”你应该总是得到0的答案。肯定答案意味着你有一个额外的“(”你有一个额外的否定答案“ “)”。
  2. 重新格式化表达式,以便更容易阅读,可能会将其分成几行,每行都有一个逻辑语句。
  3. 使用突出显示代码编辑器的语法。这应该显示你的不匹配

答案 5 :(得分:0)

左侧缺少一个括号。

答案 6 :(得分:0)

你有太多的开括号和右括号。如果您正在使用visual studio,它将帮助您使用Ctrl +'['和Ctrl +']'按键来匹配开始和结束的paranthesis /大括号

另一个建议是分组,并通过保持表达式的可读性将其分成多行。同时尝试通过对表达式进行逻辑分组来在后续括号之间留出空格。