krpiyush29 Ответов: 2

Введите детали отметок 3 студента по 4 предметам, используя структурную переменную, но не умея читать имя 2-й и 3-й переменных в программировании на C++ с помощью блока кода complier


В выходном экране мой код не может использовать имя 2-й и 3-й структурных переменных (s2 и s3). Для 1-й переменной он читает имя структурной переменной, спрашивая о метках субъектов , но в случае 2-й и 3-й переменных он не спрашивает имя переменной, а непосредственно спрашивает врага о метках субъектов.
ПОЖАЛУЙСТА, ОТЛАДЬТЕ ЭТУ ПРОБЛЕМУ.

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

#include<iostream>
using namespace std;
struct markscard
{
    char name[50];
    int eng,hin,math,sci;
};
int main()
{
    markscard s1;
    markscard s2;
    markscard s3;

    cout<<"name of s1\n";
    cin.getline(s1.name,50);
    cout<<"marks of s1 in eng,hin,math,sci\n";
    cin>>s1.eng>>s1.hin>>s1.math>>s1.sci;

    
    cout<<"name of s2\n";
    cin.getline(s2.name,50);
    cout<<"marks of s2 in eng,hin,math,sci\n";
    cin>>s2.eng>>s2.hin>>s2.math>>s2.sci;

    
    cout<<"name of s3\n";
    cin.getline(s3.name,50);
    cout<<"marks of s3 in eng,hin,math,sci\n";
    cin>>s3.eng>>s3.hin>>s3.math>>s3.sci;

    cout<<"\nreport card of "<<s1.name<<"\n";
    cout<<"eng="<<s1.eng<<"\n";
    cout<<"hin="<<s1.hin<<"\n";
    cout<<"math="<<s1.math<<"\n";
    cout<<"sci="<<s1.sci<<"\n";

    cout<<"\nreport card of "<<s2.name<<"\n";
    cout<<"eng="<<s2.eng<<"\n";
    cout<<"hin="<<s2.hin<<"\n";
    cout<<"math="<<s2.math<<"\n";
    cout<<"sci="<<s2.sci<<"\n";

    cout<<"\nreport card of "<<s3.name<<"\n";
    cout<<"eng="<<s3.eng<<"\n";
    cout<<"hin="<<s3.hin<<"\n";
    cout<<"math="<<s3.math<<"\n";
    cout<<"sci="<<s3.sci<<"\n";
}

Rick York

Одна вещь, которая для меня очевидна, это то, что у вас есть много повторяющегося кода. Повторяющиеся кодовые последовательности обычно превращаются в функции или, поскольку это c++, методы класса. Вот что нужно сделать здесь. У вас должен быть метод вашей структуры markscard под названием "GetData" (или аналогичный), где он принимает все входные данные для одного объекта - имя и четыре балла. Тогда вы можете назвать его для стольких студентов, как вы хотите - не только три.

Чтобы действительно использовать c++, вы сохраняете имя в строке std::, и оценки будут вектором целых чисел. Вы также будете держать студентов в векторе, так что у вас может быть столько предметов и студентов, сколько вы хотите, и имена могут быть практически любого размера.

2 Ответов

Рейтинг:
0

User 7429338

С помощью cin возьмем все ваши переменные, а затем оставим символ новой строки '\n' во входном буфере. cin.getline тогда будет только читать этот символ.
Этот[^] имеет хорошее объяснение с обходными путями.

Например, вставьте это после cin:

cin.ignore(numeric_limits<streamsize>::max(),'\n');


Рейтинг:
0

CPallini

Эй, мужчина (или женщина), а как насчет использования C++ удобства?

#include <iostream>
#include <sstream>
#include <string>

using namespace std;

struct markscard
{
    string name;
    int eng, hin, math, sci;
};

istream & input (istream & is, ostream & os,  string desc, markscard & m )
{
  os <<"name of " << desc << "\n";
  is >> m.name;
  cout<<"marks of " << desc << " in eng, hin, math, sci\n";
  is >> m.eng >> m.hin >> m.math >> m.sci;
  return is;
}

ostream & operator << ( ostream & os, markscard & m )
{
  os << "\nreport card of "<< m.name << "\n";
  os << "eng=" << m.eng << "\n";
  os << "hin=" << m.hin << "\n";
  os << "math=" << m.math << "\n";
  os << "sci=" << m.sci << "\n";
  return os;
}

constexpr size_t SIZE = 3;
int main()
{
  markscard ma[SIZE];
  for (size_t n = 0; n < SIZE; ++n)
  {
    ostringstream oss( "item ");
    oss << "item "<< (n+1) << ": ";
    input(cin,  cout, oss.str(), ma[n]);
  }

  for (size_t n = 0; n < SIZE; ++n)
    cout << ma[n];
}