Потому что компилятор так же запутался в вашем коде, как и читатель-человек? [Дрожь]
Пробелы и разрывы строк бесплатны и обеспечивают удобство чтения.
while ( ( (long)( 1000 * ratio * ( (long)clock() - (long)t0 ) ) % 100 ) / 1000 ) < Data_Read_Rate );
Вы также можете покончить с (длинными) приведениями clock () и t0 (при условии, что они оба int). Приведение их до вычитания не изменит результат. Чтобы сделать весь расчет длинным, достаточно было бы сделать один аргументов длинным - и самый короткий способ сделать это - приведение литерала 1000:
while ( ( ( 1000l * ratio * ( clock() - t0 ) ) % 100 ) / 1000 ) < Data_Read_Rate );
Хммм ... подожди. Вы берете что-то, по модулю 100 (с числом от 0 до 99), а затем делите на 1000? Ваш результат всегда 0 ...
О, и вы забыли сопоставить свои скобки. ; -)