【问题标题】:Error in C ProgramC 程序中的错误
【发布时间】:2009-03-25 06:25:07
【问题描述】:

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

上面的行正在生成以下错误: “

为什么会出现这个错误?

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

谢谢...

【问题讨论】:

  • 那里没有令牌
  • 对不起...我没有将其标记为“代码”并且
  • 当您将这些语句分解为变量时,诸如缺少括号之类的小错误就不太常见了。
  • 是的...我会将它们分解为多个语句。

标签: c gcc mingw


【解决方案1】:

左边缺少一个括号。这将解析:

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

除了解析问题:

  • 使用高亮匹配括号的编辑器 :)
  • 为什么不计算数据读取率充分下降之前的剩余时间,然后调用 sleep()?这在处理器上更好。

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

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

(但这在语义层面上有意义吗?砍掉它!)

【讨论】:

  • 我会开始使用更好的编辑器...:) 感谢您提供有关使用 sleep() 的提示。
  • 不,这在语义层面上没有意义。 ( x % 100 ) / 1000 == 0。
【解决方案2】:

你的右括号太多了。

另外,你的逻辑太长太深了,我懒得去弄清楚代码应该是什么。只是vim 以红色突出显示最后一个),表示它不匹配。我建议您考虑使用一些中间变量,并通过将其分散到几行而不是一行来简化该语句的逻辑。

【讨论】:

  • 这正是我要写的
【解决方案3】:

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

【讨论】:

  • +1 简洁的答案,不做功课,也是一个很好的建议;更多语句/行以提高可读性。
【解决方案4】:

因为编译器对你的代码和人类读者一样困惑? [颤抖]

空格和换行符是免费的,并且很好地增加了可读性。

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

您也可以取消 clock() 和 t0 的(长)强制转换(假设它们都是 int )。在减法之前铸造它们不会改变结果。要使整个计算变长,将 one 的参数变长就足够了 - 最短的方法是转换文字 1000:

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

嗯……等等。你取一些东西,取模 100(产生 0 到 99 之间的数字),然后除以 1000?你的结果总是 0...

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

【讨论】:

    【解决方案5】:

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

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

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

    【讨论】:

      【解决方案6】:

      您在左侧缺少一个括号。

      【讨论】:

        【解决方案7】:

        你有太多的左括号和右括号。如果您使用的是 Visual Studio,它将帮助您使用 Ctrl+'[' 和 Ctrl+']' 按键匹配开始和结束括号/大括号

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-03-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-10-12
          • 2018-11-18
          • 2011-05-23
          相关资源
          最近更新 更多