Я написал две программы с общим классом и различными основными функциями.
Вот эти коды:
ОБЩИЙ КЛАСС
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
class student
{
char *name;
int *marks,avg;
public:
student()
{
int n,i,tot;
tot=0;
name=new char[40];
cout<<"enter the name of the student";
gets(name);
cout<<"enter the number of subjects";
cin>>n;
marks=new int[n];
cout<<"MARKS"<<endl;
for(i=0;i<n;i++)
{
cout<<"enter the marks in subject:"<<i+1<<" ";
cin>>*(marks+i);
tot=tot+(*(marks+i));
}
avg=tot/n;
}
~student()
{
delete[] marks;
}
void display()
{
cout<<endl<<"name of the student: "<<name<<endl;
cout<<"the average of the student: "<<avg<<endl;
}
};
ПЕРВАЯ ОСНОВНАЯ ФУНКЦИЯ
int main()
{
int n,i;
cout<<"enter the number of students";
cin>>n;
student *ob=new student[n];
for(i=0;i<n;i++)
{
(ob+i)->display();
}
return 0;
}
ВТОРАЯ ОСНОВНАЯ ФУНКЦИЯ
int main()
{
student o;
o.display();
return 0;
}
В программе с первой главной функцией функция gets () в конструкторе ученика класса вообще не работает, но со второй основной функцией она работает нормально.
Может кто-нибудь, пожалуйста, помогите мне правильно запустить первую программу, используя gets ().
Прежде всего, вы должны избегать использования gets
как это устарело в C ++ 11 (см. Совместимость в http://www.cplusplus.com/reference/cstdio/gets/).
Причина, по которой вы видите наблюдаемое поведение, связана с линией
cin>>n;
При звонке cin
таким образом, он ждет, пока вы не введете полную строку, а затем анализирует столько, сколько может. В вашем случае я ожидаю, что вы вводите что-то вроде 10<Enter>
, Последний ввод введет новую строку (\n
) персонаж, который не будет потребляться cin>>n
, Призыв к gets()
затем внутри конструктора (в соответствии с его спецификацией) произойдет чтение до первого символа новой строки на входе, а затем пропустите его.
Поскольку следующий символ во входном потоке \n
он будет читать пустую строку, прежде чем вы сможете набрать что-нибудь еще.
РЕДАКТИРОВАТЬ: Обратите внимание, что вы будете иметь ту же задачу, если вы замените gets()
с getline()
,