注册 登录
编程论坛 C++教室

C++ 初学者关于 getline 的问题

urBABAinlaw 发布于 2014-09-09 08:41, 565 次点击
大家好,我的问题是这个程序的第一个for loop里面只能输入第一次的信息,第一次循环后就会自动跳过接下来输入流程直接到最后结果,实在不知道该怎么办。求救呀!!!!
#include <iostream>

using namespace std;

int main()
{
    const int size1 = 5, size2 = 4;
    char check;

    string student[size1];
    int grade[size1][size2];

    for(int c=0; c<=4; c++)
    {
        cout<< "Student" << c+1 << " name: ";
        getline(cin,student[c]);


        cout << "Grade: ";
        do
        {
            check = 'y';
            for(int d=0; d<=3; d++)
            {
                cin >> grade[c][d];
                if(grade[c][d]<0 || grade[c][d]>100)
                    check = 'n';
            }

            if(check == 'n')
            {
                cout << "Invalid grade. Enter again.\n";
                cout << "Grade: ";
            }
        }while(check == 'n');

    }

    int sum;
    double average;
    char letter;

    for (int c=0; c<=4; c++)
    {
        sum = 1;
        for(int d=0; d<=3; d++)
            sum += grade[c][d];
        average = sum/4.00;

        if(average>=90 && average <=100)
            letter = 'A';
        else if(average>=80 && average<90)
            letter = 'B';
        else if(average>=70 && average<80)
            letter = 'C';
        else if(average>=60 && average<70)
            letter = 'D';
        else if(average>=0 && average<60)
            letter = 'F';

        cout << "Student name: " << student[c]<<endl;
        cout << "Average grade: " << average<<endl;
        cout << "Letter grade: " << letter<<endl;
        cout << "----------------------------";
        cout << endl;
    }
}
5 回复
#2
rjsp2014-09-09 08:56
输入成绩并回车后,你的代码取走了成绩,但『回车』还在。
于是你的 getline(cin,student[c]); 成功,但内容为空。
#3
urBABAinlaw2014-09-09 08:58
我发现问题是出现在输入分数时的cin了, 如果我用空格像 87 98 67 56 再回车就会出错, 但是如果每输入一个分数就回车就会正常运行。请问做什么可以让我像87 98 67 56输入分数?
#4
urBABAinlaw2014-09-09 08:59
回复 2 楼 rjsp
那我应该做什么呢? 是用cin.ignore()吗?
#5
urBABAinlaw2014-09-09 09:12
我已经解决这个问题了。 谢谢版主
#6
stop12042014-09-10 07:59
其实 你输入 87 98 67 56   跟一个个输入是没区别的
cin 会跳过空格与换行符
cin 会把87抽取,然后进行下一句代码.等到第二个cin的时候会把98抽取.
1