2012-04-16 3 views
1

Я получаю пару странных ошибок компиляции. Это для домашнего задания (помощь в порядке). Идея состоит в том, чтобы реализовать программу, которая проверяет, насколько хорошо пользователь может нажать «войти» раз в секунду. Я должен использовать gettimeofday, чтобы получить некоторые значения времени для каждого «ввода», а затем узнать, какое среднее время и стандартное отклонение ... Я пытаюсь сделать это, проверив stdin для «\ n», а затем if правда, с помощью gettimeofday для заполнения формата: первый формат-структуры, то магазин сказал структура в массиве для последующего использования ...Странные ошибки с использованием timeval struct и gettimeofday - из-за точки с запятой в #define

ошибки я получаю при компиляции (gcc -Wextra homework1.c) является:

homework1.c: In function ‘main’: 
homework1.c:19:29: error: expected ‘]’ before ‘;’ token 
homework1.c:27:17: error: expected ‘)’ before ‘;’ token 
homework1.c:32:4: error: ‘entry_array’ undeclared (first use in this function) 
homework1.c:32:4: note: each undeclared identifier is reported only once for each function it appears in 

Я могу» почему я получаю эти первые два синтаксических ошибки, и тогда я не могу понять, почему «entry_array» не объявлен, когда я четко заявляю об этом в начале «main». Предложения?

Я чувствую, что меня сжигают, не зная, как использовать структуру timeval ... Изначально я пытался определить структуру timeval во всем мире, как и с любой другой структурой, но получал ошибку о переписывании определения для struct timeval ... Это потому, что он определен в библиотеке «sys/time.h»?

Вот код:

GNU nano 2.2.6      File: homework1.c              
//prototypes 
int GetAverage(long array[]); 
int GetStdDev(long array[]); 

//# of keystrokes tracked by user 
#define MAX_STROKES 1; 



int main(int argv, char ** argc) { 
     struct timeval entry_array[MAX_STROKES]; //container for tv_usec fields from timeval struct 
     double average = 0; 
     double std_deviation = 0; 
     int count = 0; 

     printf("This program will test your ability to hit enter every 1 second, for 10 seconds. Ready when yo$ 

     //loop to build array of timeval's 
     while (count < MAX_STROKES) { 
       struct timeval time_val; 
       int input = getc(stdin); 
       if (input == '\n') { 
         gettimeofday(&time_val, NULL); 
         entry_array[count] = time_val; 
         ++count; 
       } 
     } 
     return 0; 
} 

ответ

5

Проблема заключается в MAX_STROKES макро. Поскольку это домашнее задание, я не буду точно говорить вам, в чем проблема.

+2

+1 для указания и не ответа, поскольку это домашнее задание. Я бы плюс 5, если мог. – pstrjds

1
  1. Это: #define MAX_STROKES 1; может стать ошибкой синтаксиса, где вы используете «MAX_STROKES» (это ваша работа, чтобы выяснить, «почему»;)).

  2. Я надеюсь, что вы это закомментирована: GNU nano 2.2.6 File: homework1.c

  3. Я не уверен, является ли «() Printf» ОК ваш: в вашем вырезать/вставить, он отрезан здесь: Ready when yo$

  4. Я надеюсь, что вы # includ'ing все файлы, необходимые, например, «stdio.h» и «time.h»

+0

Да, это прокомментировано. Черт бы тебя побрал! ;) Спасибо за указание, откуда может произойти ошибка. Я скоро вернусь. – MCP

1

сделал небольшое исследование и решили, что макро идея MAX_STROKES я имел WASN» Совершенно верно. Спасибо, парни. Я предполагаю, что он не стоял за то, что хотел. Я искал «int MAX_STROKES = 1» ... Был ли по умолчанию символ char? Я не могу сказать, что именно. После прочтения я решил использовать «static const int MAX_STROKES = 1;» вместо этого он скомпилирован.

+2

Проблема была точкой с запятой (";") в макросе. Вы должны оставить это * вне *. Это заставило компилятор увидеть это: 'struct timeval entry_array [MAX_STROKES 1;];' – paulsm4

+0

Darn, вы правы! Я полностью пропустил эту деталь, поскольку я смотрел на определенную часть макроса программирования C & R C ... Тонкий. СПАСИБО ТОН за разъяснение этого. Один вопрос, который возникает, - это ... как компилятор знает, что «1» - это int? По умолчанию? – MCP

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

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