Если вы компилируете код как C, используя компилятор Microsoft (тот, который поставляется вместе с Visual Studio), то вы должны знать, что он на самом деле не поддерживает стандарт C99 . Вы застряли с C89.
И одна из самых ярых вещей, которая отсутствует в C89, - это возможность объявлять переменные где угодно. Вместо этого вы вынуждены объявить их в верхней части блока.
Ошибки компиляции, которые вы получаете, когда вы не соблюдаете это правило, часто довольно неописательны. Я делаю эту ошибку довольно часто и провожу несколько секунд, недоумевая на выходе.
Итак, измените ваш код, чтобы он выглядел следующим образом, объявив start
и finish
в top функционального блока:
#include <stdio.h>
#include <time.h>
int main(void) {
/* declare all variables at the top */
int n, c = 0;
clock_t start;
clock_t finish;
printf("Please enter an integer...\n");
scanf("%d", &n);
start = clock();
while (n != 1) {
if (n%2 == 0)
n = n/2;
else
n = (3*n)+1;
c++;
printf("n=%d\n", n);
}
finish = clock() - start;
double interval = finish / (double)CLOCKS_PER_SEC;
printf("%f clock cycles", finish);
printf("%f seconds elapsed", interval);
}
Также обратите внимание, что в C. нет такой вещи, как void main()
. Прототип функции main
всегда один из следующих:
int main(void);
int main(int argc, char **argv);
int main(int argc, char *argv[]);