c++ - 循环内控制台中的输入和输出
问题描述
我正在制作一个 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 给博
如您所见,最后一句话被切断,控制台被卡住。
解决方案
您可以将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.
推荐阅读
- gis - OpenLayers 5:笔画宽度缩放?
- sql - 如何通过最大值知道其他列的值(PostgreSQL)?
- database - MongoDB 是否使用严格单调递增的 ID 导出?
- vue.js - 如何覆盖 Vue-cli3 中的环境变量?
- matlab - Octave - 为什么 surf 不起作用,而 trisurf 起作用?
- algorithm - 带数值的伪代码流程图
- python - django 外键关系
- corda - 无论如何,不使用 Schema 就可以查询 Vault 中的状态?
- csv - 从 CSV Prestashop 1.7.4.0 导入客户时出现问题
- spring - Spring data jpa:即使在引发异常后也会执行代码