2014-09-28 2 views
0
#include <stdio.h> 

int numero=6; 
int numerodos=4; 
int result=numero*numerodos; 

main() 
{ 
    while (result<200) { 
     printf("The product of %d and %d is %d", numero, numerodos, result); 
     result=result+1 
    } 
} 

Я знаю, что алгоритм плох, я не сосредоточен на этом. Но в строке 3 я получаю ошибку «initializer element is not constant» в Codeblocks. Мне было интересно, почему это так? Я не имею дело с большими объектами, и это то, о чем говорят другие стеки, связанные с ошибкой. Если я инициализирую строку 3 в основной функции после printf; однако он строит и работает отлично, хотя и ужасный код.Я пытаюсь попрактиковаться в C, но получаю ошибку «инициализатор не является константой»

+1

Этот вопрос был дан ответ неоднократно. Не удалось выполнить автоматический поиск того же вопроса? – Jens

ответ

0

Это потому, что вы инициализировать и дать значение другой переменной за пределами основного()

Попробуйте это:

#include <stdio.h> 

int numero=6; 
int numerodos=4; 
int result=0; 

main() 
{ 
result=numero*numerodos; 
while (result<200) { 
    printf("The product of %d and %d is %d", numero, numerodos, result); 
    result=result+1; // BE CAREFUL, ADD THIS SEMICOLON 
    } 
} 
+0

Я не понимаю, инициализируется ли с результатом = 0 или result = numero * numodos инициализируется вне основного. почему ваш путь работает –

+1

Посмотрите. Вне и выше main() мы приводим некоторые директивы, такие как #include something, а затем WE DECLARE переменную. Мы определяем тип и начальное значение. Среди них мы не делаем математики. ;) –

+1

Ну, этот ответ, прямо сейчас, как есть, ошибочен. Это 'int' за« результатом »внутри' main' делает его объявлением, которое затеняет глобальное, поэтому ... я не знаю. – ThoAppelsin

0

Согласно стандарту C (6.7.9 Инициализация)

4 Все выражения в инициализаторе для объекта со статическим или длительностью хранения потока должны быть постоянными выражениями или строками литералов.

и (6.6 Постоянные выражения)

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

Примите во внимание, что нет необходимости объявлять переменные в вашей программе как глобальные. Вы можете написать

#include <stdio.h> 

int main(void) 
{ 
    int numero=6; 
    int numerodos=4; 
    int result=numero*numerodos; 


    while (result<200) { 
     printf("The product of %d and %d is %d", numero, numerodos, result); 
     result=result+1 
    } 
} 
0

Здесь вы пытаетесь динамически intializing переменную, но это не возможно в С. В С переменной может быть присвоено постоянное значение (любая нет, строка) только в момент инициализация. Это можно сделать в C++ или java.

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

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