Передача по значению структуры типа в функцию, ошибка: два или более типов данных в объявлении ‘average’!! —

#c #function #struct

#c #функция #структура

Вопрос:

Привет всем, кто прочитал

У меня небольшая проблема (или она может быть большой!), Всего одна ошибка во время компиляции, но, как мы все знаем, одной ошибки достаточно, чтобы помешать прогрессу. В принципе, я довольно новичок в C , и мне было поручено написать следующий код и передать по значению аргумент типа stuct функции. Но я получаю следующее сообщение об ошибке: «два или более типов данных в объявлении average», поэтому любое решение / решения для моей одной ошибки будет высоко оценено. Заранее большое спасибо…

 enter code here
#include <iostream> 
#include <cstdio>
#include <math.h>
using namespace std;


           struct student{

              char name[40];
              int student_id;
              int student_grades[3];
              int average;
           };

int main ()
{
   extern int average(student);
   student programming;

   int j;

         cout<<"nPlease Enter the student name for student number: ";

         cin>>programming.name;

         cout<<"nPlease Enter student i.d for student number: ";

         cin>>programming.student_id;

         cout<<"nPlease Enter student grades for student number: ";

         for(j=0;j<3;j  ){

                    cout<<"nEnter student grade no: "<<j 1<<"n";
                    cin>>programming.student_grades[j];               
         }

         programming.average=average(programming);

         cout<<"nNo.      Name      ID Number      Averagen";
         cout<<programming.name;
         cout<<"      "<<programming.student_id <<"      ";
         cout<<programming.average<<"      ";             

     system ("PAUSE");
     return 0;
}

struct student;
int void average(student programming){

    int sum=0;
    int ave=0;
    int j;

    for(j=0;j<3;j  ){
           sum=sum programming.student_grades [j];
    }
    ave=sum/3;
    return ave;
}
enter code here
  

Комментарии:

1. Вы, кажется, очень смущены. Я даже не могу сказать, что вы ожидаете от определенных действий в вашем коде.

2. Вы должны использовать std::string вместо char массива для имени.

3. «int void average ()» ???? что это должно означать?

Ответ №1:

int void average(student programming) недопустимый синтаксис. Существует только один возвращаемый тип, т. Е. Он должен быть int average(student programming) .

Комментарии:

1. Большое спасибо… Это была «пустота», которую я забыл убрать. Глупый я! Отметка репутации для вас за то, что помогли мне

Ответ №2:

Видите это?

 int void average(student programming){
  

Это «два или более типов» подряд, в той части, где вы указываете, какой тип возвращается для функции. Решайтесь.

Есть несколько других проблем с вашим кодом, в основном просто стилистических. Вы не хотите, чтобы объявление вашей функции было extern (поскольку оно находится прямо в том же файле); вы хотите, чтобы это объявление было вне main (оно будет работать внутри, но на самом деле нет смысла); вам не нужно math.h (что в любом случае является заголовком C); вы должны бытьиспользование реального строкового типа для представления строк; сохранение среднего значения обратно в структуру не особенно полезно (оно у вас уже есть, поэтому просто используйте его напрямую); и некоторые из ваших имен переменных не имеют никакого смысла ( programming это особенно очевидный пример).

Комментарии:

1. Да- очки приняты, я подробно рассмотрю то, что вы сказали, и попытаюсь изучить. Большое спасибо, галочка для вас.

2. Не могли бы вы, возможно, уточнить «вы должны использовать реальные строковые типы для представления строк»? как пример…

3. std::string Класс из <string> библиотеки.

Ответ №3:

Ваше объявление вашей средней функции должно быть:

 int average(student programming)
  

У вас там есть лишняя «пустота».