Компилятор сообщает вам, в чем именно заключается проблема: вы не объявили letters
, words
или sentences
в функции grade
.
Объявления этих переменных в другие функции являются локальными для этих функций - они не видны изнутри функции grade
.
Однако у вас есть пара более серьезных проблем. Во-первых, ни одна из ваших функций не вызывается откуда угодно - main
считывает строку, а затем немедленно завершает работу, не делая ничего другого. Во-вторых, grade
не может узнать, какие значения должны быть в letters
, words
или sentences
.
Что вы вероятно хотите сделать вызывает ваши функции подсчета изнутри grade
, например:
float grade( string s )
{
int letters = count_letters( s );
int words = count_words( s );
int sentences = count_sentences( s );
float x = ...;
...
}
, а затем вызывает grade
из main
как
int main( void )
{
string par = get_string( "Text: " );
grade( par );
}
В качестве альтернативы вы можете вызвать каждый из подсчет функций из main
и передача результатов в виде аргументов в grade
:
int main( void )
{
string par = get_string( "Text: " );
int letters = count_letters( par );
int words = count_words( par );
int sentences = count_sentences( par );
grade( letters, words, sentences );
}
, и в этом случае объявление и определение grade
должно быть
float grade( int, int, int ); // declaration
float grade( int letters, int words, int sentences ) // definition
{ // since they are declared as arguments,
float x = ...; // there's no need to declare them in the body of the function
}
Теперь вот вопрос - собираетесь ли вы, чтобы кто-нибудь использовал значение x
после выхода grade
? Если это так, тогда вам нужно добавить
return x;
в конец grade
.
Если нет, то измените тип возвращаемого значения функции с float
на void
в как декларация, так и определение:
void grade( string );
void grade( string s ) { ... } // definition