lihaoyuaiqq130
lihaoyuaiqq130
2018-08-20 04:30
采纳率: 66.7%
浏览 605

有关c++中getline的问题

做了一个简单的学生成绩统计的小程序,储存学生信息并输出最高与最低成绩,
但是输入时候总是自动跳过cin,这是为什么
#include
#include
using namespace std;
struct node
{
string name;
int id;
int grade;
}a[10];
int main()
{
int n;
cin>>n;
for(int i=0;i {
getline(cin,a[i].name);
cin>>a[i].id;
cin>>a[i].grade;
}
int max=0;
int min=0;
for(int i=1;i {
if(a[max].grade if(a[min].grade>a[i].grade) min=i;
}
cout<<a[max].name<<" "<<a[max].grade<<endl;
cout<<a[min].name<<" "<<a[min].grade;
}

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

7条回答 默认 最新

  • dabin510
    dabin510 2018-08-20 06:21
    已采纳

    int main()
    {
    int n;
    cin >> n;
    string temp;
    for (int i = 0; i {
    cin.ignore();;//忽略回车
    getline(cin, a[i].name);
    cin >> a[i].id;
    cin >> a[i].grade;
    }

    }

    终其原因就是因为getline函数把上次出入n之后的空格当做输入了,2楼3楼方法都可以

    点赞 评论
  • qq_36066923
    噢灬燧先生 2018-08-20 04:54

    getline(cin,String)这个规定第二个参数就一定要是String类型,如果要用char数组,改成
    cin.getline(字符指针(char*),字符个数N(int),结束符(char));
    此函数会一次读取多个字符(包括空白字符)。它以指定的地址为存放第一个读取的字符的位置,依次向后存放读取的字符,直到读满N-1个,或者遇到指定的结束符为止。若不指定结束符,则默认结束符为'\n'。

    点赞 评论
  • phenix2009
    白色一大坨 2018-08-20 05:11

    加上一行getline忽视掉回车键就好了:

     int main()
    {
        int n;
        cin >> n;
        string temp;
        for (int i = 0; i<n;i++)
        {
            getline(cin, temp);//忽略回车
            getline(cin, a[i].name);
            cin >> a[i].id;
            cin >> a[i].grade;
        }
    
    }
    
    点赞 评论
  • zhao3132453
    半雨微凉丶 2018-08-20 05:56

    cin.ignore();

    点赞 评论
  • dabin510
    dabin510 2018-08-20 06:22

    打错字了,是把输入n之后的回车符当做输入行了

    点赞 评论
  • cTen_Master
    cTen_Master 2018-08-20 07:39
        int n;
        cin>>n;
        for(int i=0;i {
            getchar();
            getline(cin,a[i].name);
            cin>>a[i].id;
            cin>>a[i].grade;
        }
    

    其实很多针对char*的库函数是不支持string参数的,
    不过getline的输入流恰好以cin的新标准运作,,
    缓存区读入整形类型后如果单独成行,就会遗留\n霸占当前行
    另外getline和非字符串类型交互输入都是搭配getchar()等使用的

    点赞 评论
  • wozaixuexibiancheng
    wozaixuexibiancheng 2018-08-21 16:13

    直接用cin是不是会好一点???比较方便。不会出错。可以输入一行(自行解析),也可以输入多行。

      int n;
        cin>>n;
        for(int i=0;i<n;i++) {
            cin>>a[i].name;
            cin>>a[i].id;
            cin>>a[i].grade;
        }
        还有就是可以直接写成
        int n;
        cin>>n;
        for(int i=0;i<n;i++) {
            cin>>a[i].name>>a[i].id>>a[i].grade;
        }
    
    点赞 评论

相关推荐