0

在 C++ 中,我必须编写一个程序,我必须编写一个菜单驱动程序来输入、编辑或显示学生的姓名、id 和 cgpa。代码如下:

#include<iostream>
#include<stdlib.h>
#include<stdio.h>
using namespace std;

struct student
{
    char name[20];
    int id;
    float cgpa;
};

void input(struct student *);
void display(struct student *);
void edit(struct student *);

int main()
{
    int ch;
    struct student a;

    while(ch!=4)
    {
        cout<<"1.input";
        cout<<"\n2.edit";
        cout<<"\n3.display";
        cout<<"\n4.exit";
        cout<<"\nenter your choice";
        cin>>ch;
        if(ch==1)
        {
            cout<<"enter name, id and cgpa of student\n";
            input(&a);
        }
        else if(ch==2)
        {
            cout<<"enter new name, id and cgpa  of the student\n";
            edit(&a);
        }
        else if(ch==3)
        {
            display(&a);
        }
        else if(ch==4)
        {
            ch=ch;
        }
        else{cout<<"wrong choice\n";}
    }

    return 0;
}

void input(struct student *s)
{
    cin>>s->name;
    cin.ignore(256,'\n');
    cin>>s->id;
    cin>>s->cgpa;
}

void edit(struct student *s)
{
    cin>>s->name;
    cin.ignore(256,'\n');
    cin>>s->id;
    cin>>s->cgpa;
}

void display(struct student *s)
{
    cout<<s->name<<"\n";
    cout<<s->id<<"\n";
    cout<<s->cgpa<<"\n";
}

但是每当我通过 cin.getline() 函数输入名称时,它不会在屏幕上显示名称。取而代之的是一个空白区域,并打印 id 和 cgpa。cin 工作正常,但 cin 不占用空间。使用 cin.getline() 时没有打印名称的代码有什么问题。

4

1 回答 1

0

打电话cin.ignore()前打电话cin.getline()

或者

进行一个虚拟调用cin.getline()以使用后面的换行符cin

于 2013-09-04T20:40:01.140 回答