2015-04-14 4 views
-1

Я пытаюсь создать программу, которая выводит значения^2,^4 и^(1/3) всех четных чисел от 0 до 100. Это то, что у меня есть.Ожидаемый ')' before ';' токен C

#include <stdio.h> 
#include <math.h> 
main(){ 
    int a, b, c, i; 
    for (i=0; i<100; i=i+2;) 
     a = (1*1); 
     b = (i*i*i*i); 
     c = pow(i, (1/3)); 
     printf("%d, %d, %d", a, b, c); 
     return 0; 
} 

Это дает мне ошибку на линии 6, которая говорит

error: expected ')' before ';' token. 

Это мой первый день с, так что я действительно загнаны в угол прямо сейчас.

+3

Там даже не вопрос здесь, ваш компилятор уже рассказывающие вам об ошибке. –

+0

В C, чтобы иметь более одной строки, выполненной в кодовом блоке (например, цикл «для»), блок кода должен содержать открывающую и закрывающую фигурные скобки; '{' и '}' аналогично: for (....) {....}, иначе только следующий оператор рассматривается как часть цикла. строка: 'a = (1 * 1);' всегда будет приводить к тому, что «a» будет установлен в 1. Я подозреваю, что на самом деле был нужен квадрат «i», а не квадрат 1. предположим: «a = i * i); – user3629249

ответ

1

Следующий код показывает все предложенные исправления для опубликованного кода.

вставленные комментарии для объяснения изменений

#include <stdio.h> // printf 
#include <math.h> // pow 

int main() // <-- use valid return type 
{ 
    int a; // value ^2 
    int b; // value ^4 
    double c; // value ^1/3 note: pow() returns a double 
    int i; // loop index 

    // the following loop calculates all the request values 
    // from 0 through 98. did you want to include '100'? 
    for (i=0; i<100; i+=2) // < corrected for statement 
    {      // < added braces so whole code block loops 
     a = (i*i);   // < squared value, not 1 
     b = (i*i*i*i); 
     c = pow((double)i, (1.0/3.0)); // < corrected integer divide 
     printf("%d, %d, %lf \n", a, b, c); 
          // properly printed double, 
          // added newline 
          // so output displayed immediately 
    } // end for 

    return 0; 
} // end function: main 
4

для цикла, как ожидается, выглядеть следующим образом:

for (initialization; condition; increment/decrement) 

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

2

удалить точку с запятой в for заявлении после i=i+2;

for (i=0; i<100; i=i+2) 

Также вы, вероятно, необходимо использовать некоторые скобки вокруг тела. Цикл for - это только один оператор.

Что-то вроде

for (i=0; i<100; i=i+2) { 
     a = (1*1); 
     b = (i*i*i*i); 
     c = pow(i, (1/3)); 
     printf("%d, %d, %d", a, b, c); 
} 

Редактировать

Я думаю о for заявление в C, будет состоять из трех разделов в скобках и что после закрывающей скобки либо одного оператора или составной оператор, который представляет собой серию утверждений, заключенных в фигурные скобки.

Заявление, такие как for (i=0; i < 10; i=i+2) printf(" i = %d\n", i); выведет последовательность цифр, 0, 2, 4, 6, 8. Это похоже на набор утверждений с использованием while заявления, как в:

i=0; 
while (i < 10) { 
    printf (" i = %d\n", i); 
    i=i+2; 
} 

три секции в скобкой for заявления не являются обязательными, так что вы могли бы иметь что-то вроде следующего, который аналогичен по структуре цикла while

i=0; 
for (; i < 10;) { 
    printf (" i = %d\n", i); 
    i=i+2; 
} 

, в котором вы перенесли первое и третьи секции за пределами инструкции for. Обратите внимание, что поскольку оператор for имеет составной оператор, мы должны использовать фигурные скобки, чтобы указать, что следующие операторы, каждая из которых заканчивается точкой с запятой, являются частью инструкции for.

Мы также можем использовать запятую операторов внутри цикла for таких, как в следующем примере:

int i, j, k; 
for (i = j = 0, k = 3; i < 10 && k > 1; i++, j+=2) { 
    printf (" i = %d j = %d k = %d\n", i, j, k); 
} 

выше будет выглядеть следующим образом:

int i, j, k; 
j = 0; 
i = j; 
k = 3; 
while (i < 10 && k > 1) { 
    printf (" i = %d j = %d k = %d\n", i, j, k); 
    i++; 
    j+=2; 
} 
1

У вас есть ваш для инициализатора передачи контура и испытания смешанное состояние. Измените его так, чтобы он выглядел так:

for (i=0; i<100; i=i+2) 
+0

BTW, этот цикл будет включать только следующее утверждение. Если вы имели в виду большее количество заявлений, которые должны быть включены, то вы должны использовать внешние фигурные скобки для всех операторов, входящих в цикл 'for'. – StarPilot

+0

Yup, который сделал трюк. –

3

Для представления цикла цикла для двух его частей требуется только две точки с запятой.

Так это должно выглядеть так:

for (i = 0; i < 100; i = i + 2) 

Обратите внимание, что существует точка с запятой, которая разделяет i=0 и i < 100.

Кроме того, вы можете упростить i = i + 2, просто указав i += 2.

Что касается остальной части кода,

c = pow(i, (1/3)); 

Это не будет работать. В C 1/3 оценивает значение 0, потому что компилятор C рассматривает это как целочисленное деление. Вы хотите использовать 1.0/3.0.

0

ваш цикл не является правильным

for (i=0, i<100; i=i+2;) 

Это должно быть, как это

for (i=0; i<100; i=i+2) 
0

Как @Bill Линч сказал за цикл должен быть:

#include <stdio.h> 
#include <math.h> 
main(){ 
    int a, b, c, i; 
    for (i=0; i<100; i=i+2) // changed comma to a semicolon 
    {//add this bracket 
     a = (1*1); 
     b = (i*i*i*i); 
     c = pow(i, (1/3)); 
     printf("%d, %d, %d", a, b, c); 
    }//add this bracket 
    return 0; 
} 

Не забудьте также скобки для вашей функции.

+0

К сожалению, не удалось поймать этого в конце – Robert