代码:
#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
struct student
{
char name[20];
int id;
float cgpa;
};
int main()
{
student s[100];
int n,i;
cout<<"Enter number of students: ";
cin>>n;
cout<<"Enter records of "<<n<<" students"<<endl;
for(i=0; i<n ; i++)
{
cout<<"Enter name: ";
gets(s[i].name);
cout<<"Enter ID: ";
cin>>s[i].id;
cout<<"Enter CGPA: ";
cin>>s[i].cgpa;
cout<<endl;
}
for(i=0; i<n ; i++)
{
cout<<"\nName: "<<s[i].name;
cout<<"\nID: "<<s[i].id;
cout<<"\nCGPA: "<<s[i].cgpa<<endl;
}
}
输出:
Enter number of students: 2
Enter records of 2 students
Enter name: Enter ID:
使用崇高文字3 c ++
答案 0 :(得分:1)
使用<string>
作为名称而不是字符数组,然后像往常一样使用cin
而不是gets
来读取字符串。
答案 1 :(得分:0)
作为Some Programmer Dude的指针,您按下的输入将以换行符'\n'
的形式放入输入缓冲区,然后由get()
接受,从而使其跳至下一个输入。
有两种方法可以解决此问题:
在获取输入的循环开始时使用cin.ignore()
。
更好的选择是摆脱gets()
。自c ++ 14起不推荐使用。其次,用字符串替换字符数组。
因此该结构将看到string name;
的修改
只需在循环中执行cin>>s[i].name;
。
就这样。
此外,最好使用cstdio
代替stdio.h
。