2009-11-11 6 views
0

Я пытаюсь разделить timeval на целое число. Вот что у меня до сих пор:Разделение времени на целое число в C

#include <limits.h> 
#include <stdio.h> 
#include <stdlib.h> 

int 
main(void) 
{ 
    struct timeval my_time; 
    struct timeval my_time_quotient; 
    int i; 

    gettimeofday(&my_time, NULL); 
    i = 5; 

    my_time_quotient = my_time/i; 

    printf("%d secs, %d msecs\n", (int)my_time_quotient.tv_sec, (int)my_time_quotient.tv_usec); 

    return 0; 
} 

Когда я компилирую я получаю:

[email protected]:~/$ gcc -g -otimespike timespike.c 
timespike.c: In function ‘main’: 
timespike.c:15: error: invalid operands to binary/(have ‘struct timeval’ and ‘int’) 

Что такое правильный способ найти фактор?

+0

Если это вопрос о домашнем задании, добавьте тег «домашняя работа», чтобы мы не сразу отдали ответ. –

+0

Добро пожаловать в переполнение стека. Если вы хотите ответить на такие сообщения, нажмите ссылку «добавить комментарий» ниже вашего вопроса и ниже каждого ответа. –

ответ

3

Вы не можете разделить struct на числовой тип, даже если struct представляет собой своего рода номер.

Вы должны сначала преобразовать свою структуру в целочисленный тип, представляющий число микросекунд. Поскольку элементы имеют тип int, вам нужно будет найти числовой тип, имеющий почти в два раза больше бит, чем int. Надеюсь, ваш компилятор поддерживает long long int или __int64, оба из которых являются 64-битными.

После преобразования содержимого структуры в числовой тип, деление происходит так же, как и при любом делении.

После выполнения деления вам нужно будет вернуть результат обратно к временному интервалу, возможно, используя оператор «остаток после деления» или «модуль», x % y.

1

Как это может быть вопрос о домашнем задании, я не дам вам никакого кода, но я дам вам объяснение, почему он не работает, и подход к использованию, чтобы заставить его работать.

Когда вы работаете с обычными старыми типами данных (целыми числами, удваивает), вы можете разделить. Однако timeval не является простым старым типом данных - это комбинация из двух в структуре. структуры времени не знают, как делиться целыми числами (вот что это значит, когда говорится invalid operands to binary/(have ‘struct timeval’ and ‘int’)).

Итак, вы должны сделать это вручную - разделите количество секунд (tv_sec), а затем разделите количество наносекунд (tv_usec) и вставьте результаты этих разделов обратно в свой my_time_quotient timeval. Обработка долей секунд остается как упражнение для читателя, но подход, предложенный Хит, - это один из подходов.

+0

Это не будет работать так, как указано - результат деления секунд должен был бы сохранить какой-либо дробный результат (т. Е. Сложную математику либо с плавающей запятой, либо с фиксированной запятой), аккумулировать доли секунды в счетчик микросекунд, обнаруживают переполнение микросекунд и несут приращение в счетчик секунд ... –

+0

Я обращаю ваше внимание на примечание «Обработка долей секунд остается как упражнение для читателя, но подход, предложенный Хит, - это один из подходов». Я не утверждаю, что вы разделили бы длинный int на делитель, чтобы получить количество секунд. Я утверждаю, что вам нужно обрабатывать подразделение самостоятельно в любом методе, т. К. Вы являетесь правильным подходом. – Smashery

+0

Простите, я пропустил эту записку о левом читателе. ;) –

 Смежные вопросы

  • Нет связанных вопросов^_^