while(((long)(1000*ratio*((long)clock()-(long)t0))%100)/1000)<Data_Read_Rate);
以上行产生以下错误: “&lt; token”之前的语法错误。
为什么会出现这个错误?
我使用MINGW32进行开发(GCC编译器)。
...谢谢
答案 0 :(得分:8)
左边有一个paren失踪。这将解析:
while ((((long)(1000*ratio*((long)clock()-(long)t0))%100)/1000)<Data_Read_Rate);
除了解析问题:
另外,考虑到你使用%运算符,你可能希望像这样放置额外的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)
如前所述,您的括号不匹配。
使用这样的表达式,使用一些临时变量来简化语句几乎总是更好。但是,以下提示可能有所帮助。
答案 5 :(得分:0)
左侧缺少一个括号。
答案 6 :(得分:0)
你有太多的开括号和右括号。如果您正在使用visual studio,它将帮助您使用Ctrl +'['和Ctrl +']'按键来匹配开始和结束的paranthesis /大括号
另一个建议是分组,并通过保持表达式的可读性将其分成多行。同时尝试通过对表达式进行逻辑分组来在后续括号之间留出空格。