elapsedTime=(t1.tv_sec - t2.tv_sec)*10000.0;
Вы принимаете во внимание только tv_sec.фактическая временная структура имеет tv_sec , а также tv_usec часть, которые оба являются целыми числами, не содержащими дроби (хотя точный тип не гарантируется)
tv_sec содержит секунды, а tv_usec - микросекунды.
также гарантируется, что tv_usec всегда меньше 1000000, что означает, что вам нужно только рассчитать их разницу по отдельности.
и вы такжевыполнив t1-t2, вы должны изменить его на t2-t1, так как t2 - последний временной интервал.вот почему вы получаете отрицательные времена.
elapsedTime=((double) (t2.tv_sec - t1.tv_sec))+((double) (t2.tv_usec - t1.tv_usec) / 1000000.0);
, который возвращает время в формате "sec.usec", который должен быть достаточно точным:)
обратите внимание, что вам нужно объявить elapsedTimeкак double вместо int, а также замените второй «$ d» в printf на «% f».
, вам также нужно учитывать, что ввод с клавиатуры буферизован , что означает, что вы 'блокируется в getchar () до нажатия Enter, затем буфер подается в getchar, один символ при вызове.вы можете использовать просто Enter в качестве входного символа для проверки точности кода, но чтобы использовать его с реальными символами, вам нужно использовать небуферизованный ввод.
Документы GNU: 21.2 Истекшее время