Ketan2305 Ответов: 2

Программа не работает C++


не будучи в состоянии найти ошибку, принимает только ввод 1 студента, а при вводе имени второго он просто пропускает все и показывает странные цифры в результате каждого, кроме первого.вот код(ps Я новичок в c++)
#include<iostream>
#include<stdio.h>
using namespace std;
struct student{
    int age, marks[5], clas, avg;
    char name[10], res;
};
int main(){
    student p[5];
    cout<<"enter name, class, age, and marks in 5 subjects :\n";
    for(int i=0; i<5; i++){                   //input data for each student
        cout<<"student "<<i+1<<"\n";
        gets(p[i].name);
        cin>>p[i].clas;
        cin>>p[i].age;
        for(int j=0; j<5; j++){
            cin>>p[i].marks[j];
        }
    }
    for(int k=0; k<5; k++){     //calculate average                                           
        p[k].avg=0;
        for(int f=0; f<5; f++){
            p[k].avg+=p[k].marks[f];
        }
        p[k].avg/=5;
    }
    for(int x=0; x<5; x++){           //calculate result on basis of average                              
        if(p[x].avg>=40){
            p[x].res='P';
        }
        else{
            p[x].res='F';
        }
    }
    cout<<"RESULT :\n";     //output data for each student
    for(int m=0; m<5; m++){                                     
        cout<<"STUDENT "<<m+1<<"\n";
        puts(p[m].name);
        cout<<"age "<<p[m].age;
        cout<<"class "<<p[m].clas;
        for(int n=0; n<5; n++){
            cout<<p[m].marks[n]<<endl;
        }
        cout<<"average "<<p[m].avg;
        cout<<"result "<<p[m].res;
    }
}


Что я уже пробовал:

сначала я изменил cin.getline на gets, но все еще не работает должным образом, он не принимает входные данные должным образом, и результат-случайные числа, за исключением первого студента, чей результат отображается правильно

Peter_in_2780

Смешивание gets() и "cin >> ..." может привести к некоторым странным результатам, в зависимости от буферизации и так далее. Я предлагаю вам придерживаться одного способа ввода.

Patrice T

"я изменил cin.getline на gets, но все еще не работает должным образом"
Выберите 1, никогда не смешивайте.

2 Ответов

Рейтинг:
1

CPallini

Эй, парень, у тебя есть C++- а ты разве нет?

#include <iostream>
#include <vector>
#include <array>
#include <sstream>
using namespace std;


class Student
{
  string name;
  int clas;
  int age;
  array<int, 5> mark;

public:
  double average();
  char result(double average);

  bool fromUser(const string & prompt);
  void toUser(const string & header);
};

bool Student::fromUser(const string & prompt)
{
  cout << prompt << endl;
  cout << "name: ";
  cin >> name;

  cout << "class: ";
  cin >> clas;
  cout << "age: ";
  cin >> age;
  cout << "now enter 5 marks\n";

  for ( auto & m : mark)
    cin >> m;

  return cin.good();
}

double Student::average()
{
  double avg = 0.0;
  for (const auto &  m : mark)
    avg += m;

  avg /= mark.size();
  return avg;
}

char Student::result(double average)
{
  return (average >= 40.0 ? 'P': 'F');
}

void Student::toUser(const string & header)
{
  cout << header << endl;
  cout << "name: " << name << endl;
  cout << "class: " << clas << endl;
  cout << "age: " << age << endl;
  cout << "marks: " << endl;
  for (const auto & m : mark)
    cout << "  " << m << endl;

  double avg = average();
  cout << "average: " << avg << endl;
  cout << "result: " << result(avg) << endl;
}

int main()
{
  vector <Student> student;
  constexpr int STUDENTS=2;

  for (int i=0; i<STUDENTS; ++i)
  {
    ostringstream oss;
    oss << "please enter data for student " << (i+1) ;
    Student s;
    s.fromUser(oss.str());
    student.push_back(s);
  }

  cout << "******************************" << endl;

  for (int i=0; i<student.size(); ++i)
  {
    ostringstream oss;
    oss << endl << "data of student " << (i+1);
    student[i].toUser(oss.str());
  }
}


Ketan2305

ну мы еще не выучили класс и бул
да, у меня есть c++

CPallini

Итак, О'Кей
Не путайте C I/O (printf, scanf, fgets) с потоками C++ (cin, cout).
Никогда не используйте gets.

Ketan2305

не векторы и не библиотека sstream
я новичок

Рейтинг:
0

KarstenK

Вам нужно работать с отладчиком. Поищите некоторые онлайн-учебники для использования в вашей среде разработки IDE.

Я предполагаю, что вы не соответствовали типам в своем коде.