2015-01-04 3 views
2

Я пытался узнать C из книги под названием C Programming Absolute Beginner's Guide, и я столкнулся с проблемой, и одна плохая вещь - вы не можете спросить книга вопрос! Набрал ошибку в Google и привел меня на этот сайт. Ошибка, которую я получаю, находится в заголовке вопроса, и это мой код.Ошибка: ожидаемые спецификаторы декларации или «...» перед '{' token

#include <stdio.h> 

main(

{ 

//Set up the variables, as well as define a few 

    char firstInitial, middleInitial; 
    int number_of_pencils; 
    int number_of_notebooks; 
    float pencils = 0.23; 
    float notebooks = 2.89; 
    float lunchbox = 4.99; 


    //The information for the first child 
    firstInitial = 'J'; 
    middleInitial = 'R'; 

    number_of_pencils = 7; 
    number_of_notebooks = 4; 

    printf("%c%c needs %d pencils, %d notebooks, and 1 lunchbox\n", 
     firstInitial, middleInitial,number_of_pencils, 
     number_of_notebooks); 
    printf("The total cost is £%.2f\n\n", number_of_pencils*pencils + number_of_notebooks*notebooks + lunchbox); 

    //The information for the second child 
    firstInitial ='A'; 
    middleInitial = 'J'; 

    number_of_pencils = 10; 
    number_of_notebooks = 3; 

    printf("%c%c needs %d pencils, %d notebooks, and 1 lunchbox\n", 
     firstInitial, middleInitial,number_of_pencils, 
     number_of_notebooks); 
    printf("The total cost is £%.2f\n\n", number_of_pencils*pencills 
     + number_of_notebooks*notebooks + lunchbox); 

    //The information for the third child 
    firstInitial = 'M'; 
    middleInitial = 'T'; 

    number_of_pencils = 9; 
    number_of_notebooks = 2; 

    printf("%c%c needs %d pencils, %d notebooks, and 1 lunchbox\n", 
     firstInitial, middleInitial,number_of_pencils, 
     number_of_notebooks); 
    printf("The total cost is £%.2f\n", 
     number_of_pencils8pencils + number_of_notebooks*notebooks + lunchbox); 

     return0; 
} 

) 

Что не так с этим кодом?

+1

Добро пожаловать на переполнение стека. Вскоре прочитайте страницу [О программе]. Если у вас есть ошибка компиляции, лучше всего включить точное сообщение об ошибке - за исключением того, что если имя файла является абсолютным путем длиной в милю, уменьшите имя до базового имени файла (так что измените '/ огромный/длинный/path/with/many/levels/of/directory/src/file.o' только для 'file.o'). Убедитесь, что источник, который вы показываете, и номера строк в нем соответствуют тому, что говорит компилятор. Если файл слишком длинный для удобства, создайте MCVE ([Как создать минимальный, полный и проверенный пример?] (Http://stackoverflow.com/help/mcve)) –

+1

Я думаю, что последний символ ')' должен быть сразу после 'main (' so -> 'main()' Это делает трюк для вас? (BTW: 'return0;' -> 'return 0;') – Rizier123

+0

Я посмотрел образец материала для книги, и (в главе 2) все примеры программ имеют 'main()', а не 'int main()' (или, как я бы предпочла, 'int main (void)'). Они включают в себя 'return 0; 'Это необходимо, поскольку они не используют нотации C99, которые позволяют исключить« return 0; »(хотя я тоже не люблю код, который делает это). Третье издание датировано 2014 годом, это немного беспокоит то, что первые программы не были написаны в текущем C около 15 лет. Мне не нравится его характеристика 'return',' while', 'int',' if', 'float' as 'commands' - они Ключевые слова! Осторожно! –

ответ

1

Ваша main() функция начинается:

main(
{ 

и заканчивается:

} 
) 

Это неправильно. Это должно быть:

int main(void) 
{ 
    …body of function… 
} 

void не является обязательной. Тип возврата не является дополнительным в современном C (стандарт C89/C90 разрешил его опционально; для него требуется C99 и более поздняя версия, вы должны запрограммировать так, как если бы это было необходимо, даже если ваш компилятор не настаивает на этом). Правильный тип возврата - int (но см. What should main return in C and C++? для получения полной информации).

Также, как Rizier123pointed out, есть return0; в конце main(); это должно быть return 0;.

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

+3

Также он сделал 'return0;' ему нужно добавить пробел – Rizier123

2

Ваша основная функция не является хорошей. Компилятор говорит об этом.

Это должно выглядеть

main() 
{ 
.... 
} 

Вместо

main(
{ 
... 
} 
) 
+2

В современном C (все, что написано с 2000 года) функция 'main()' должна иметь явный тип возврата 'int', независимо от того, действительно ли компилятор настаивает на этом или нет. Каждая функция должна иметь явный тип возврата. –

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