使用timeval结构和gettimeofday的奇怪错误 - 因为#define中的分号

时间:2012-04-16 15:57:15

标签: c gettimeofday timeval

我收到了一些奇怪的编译错误。这是一个家庭作业(帮助还可以)。我们的想法是实现一个程序来测试用户每秒可以进入“输入”的程度。我应该使用gettimeofday为每个“输入”获取一些时间值,然后找出平均时间和标准偏差...我试图通过检查标准输入'\ n'来做到这一点,然后如果是的,使用gettimeofday填充timeval结构,然后将所述结构存储在一个数组中供以后使用...

编译时遇到的错误(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

我无法理解为什么我得到前两个语法错误然后我无法理解为什么当我在“main”的开头明确声明它时,“entry_array”是未声明的。建议?

我觉得我因为不知道如何使用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;
}

3 个答案:

答案 0 :(得分:5)

问题是MAX_STROKES宏。由于这是家庭作业,我不会告诉你究竟是什么问题。

答案 1 :(得分:1)

  1. 此: 无论你使用“MAX_STROKES”,#define MAX_STROKES 1;都会成为语法错误(你的工作就是找出“为什么”;))。

  2. 我希望你注释掉这个:GNU nano 2.2.6 File: homework1.c

  3. 我不确定你的“printf()”是否正常:在你的剪切/粘贴中,它被切断了:Ready when yo$

  4. 我希望你能够#incd'ing所有你需要的文件,比如“stdio.h”和“time.h”

答案 2 :(得分:1)

做了一点研究并决定我的MAX_STROKES宏观想法不太对劲。多谢你们。我的猜测是,它并不代表我想要的东西。我一直在寻找“int MAX_STROKES = 1”......默认情况下,1是一个char吗?我不知道究竟是什么。读完后我决定使用“static const int MAX_STROKES = 1;”相反,它编译得很好。