【问题标题】:C++ getline inside while loop missing first letter. Does not work without cin.ignore?C++ getline 在 while 循环中缺少第一个字母。没有cin.ignore就不行吗?
【发布时间】:2019-05-08 21:55:47
【问题描述】:

我已经玩了一个多星期了,但没有成功。它现在的运行方式,它将跳过我的 while 循环第一次迭代的第一个字母。如果我删除 cin.ignore(),下面的代码将不起作用。

#include <iostream>
#include <iomanip>
#include <string>

using namespace std;

int main(){
    cout << fixed << setprecision(2);
    float gpaTot = 0, gpa, clasNum;
    int creds;
    string clas, cont = "Yes", grade;

    while (cont == "Yes"){
        cin.ignore();
        cout <<"Enter a course name: ";
        getline(cin, clas);
        cout << clas << endl << "Enter number of credits: ";
        cin >> creds;
        cout << creds << endl << "Enter your grade (A, B, C, D, F): ";
        cin >> grade;
        cout << grade << endl << "Continue ('Yes' or 'No')? ";
        cin >> cont;
        cout << cont << endl;
    }

【问题讨论】:

    标签: c++ while-loop cin getline


    【解决方案1】:

    cin.ignore() 调用移至循环末尾。

    while (cont == "Yes"){
        cout <<"Enter a course name: ";
        getline(cin, clas);
        cout << clas << endl << "Enter number of credits: ";
        cin >> creds;
        cout << creds << endl << "Enter your grade (A, B, C, D, F): ";
        cin >> grade;
        cout << grade << endl << "Continue ('Yes' or 'No')? ";
        cin >> cont;
        cout << cont << endl;
        cin.ignore();
    }
    

    这样,第一次调用getline 不会跳过一个字母。随后的调用也可以正常工作,因为cin &gt;&gt; cont; 行剩余的换行符被cin.ignore() 读取并丢弃。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-25
      • 1970-01-01
      • 2013-10-07
      • 2017-10-25
      • 2017-03-29
      • 2012-01-03
      相关资源
      最近更新 更多