首页 > 解决方案 > 循环内控制台中的输入和输出

问题描述

我正在制作一个 C++ 程序来处理书籍。用户需要插入 3 本书的标题、价格和卷数。我没有Book在代码中包含该类,因为它与我的问题无关。

我被困在用户需要在循环内输入值的地方。当我测试程序时,控制台总是在看似随机的时间出现错误。(即它显示"Give book p"而不是完整的句子并等待输入)。

我阅读了其他答案,我应该cin.ignore()在每次cin>>通话后使用,以便忽略\n用户按下回车时放在流中的内容,但这并不能解决我的问题?

任何想法我做错了什么?

#include <iostream>
#include <sstream>

using namespace std;

int main() {
    string title;
    double price;
    int volumes;

    for (int i=0; i<3;i++){
        cout << "Give book title : " << endl;
        getline (cin, title);
        cout << "Give book price : " << endl;
        cin >> price;
        cin.ignore();
        cout << "Give number of volumes : " << endl;
        cin >> volumes;
        cin.ignore();
    }

    return 0;
}

以下是控制台的示例:

给书名:
霍比特人
霍比特人
给书价:
12.5
12.5
给出卷数:
10
10
给书名:
指环王
指环王
给书价:
12
12
给出卷数:
7
7
给博

如您所见,最后一句话被切断,控制台被卡住。

标签: c++cincoutclion

解决方案


您可以将std::ws其用作方法的参数getline()来实现您的目标。

以下代码将满足您的目的:

#include <iostream>

int main() {
    std::string title;
    double price;
    int volumes;

    for (int i=0; i<3;i++){
        std::cout << "Give book title : ";
        std::getline(std::cin >> std::ws, title);
        std::cout << "Give book price : ";
        std::cin >> price;
        std::cout << "Give number of volumes : ";
        std::cin >> volumes;
        std::cout<<"Title: "<<title<<" costs "<<price<<" for "<<volumes<<" volumes.\n";
    }

     return 0;
}

这将产生以下输出:

Give book title : Harry Potter
Give book price : 12.5
Give number of volumes : 5
Title: Harry Potter costs 12.5 for 5 volumes.
Give book title : James Anderson
Give book price : 45.6
Give number of volumes : 7
Title: James Anderson costs 45.6 for 7 volumes.
Give book title : Lucas Empire
Give book price : 34.5
Give number of volumes : 7
Title: Lucas Empire costs 34.5 for 7 volumes.

推荐阅读