c++ - 第一次输入后字符串输入被忽略
问题描述
我试图在函数内输入字符串,getline(cin, worker->Name)
第一次输入有效,但下一次输入跳过或被忽略。它适用于整数,但不适用于字符串,我该怎么办?
代码:
#include <iostream>
using namespace std;
struct Worker {
string Name;
int Salary;
int Status;
int Child;
};
void InputWorkerData(Worker *worker) {
cout << "Nama: ";
getline(cin, Worker->Name);
cout << "Gaji per bulan: ";
cin >> worker->Salary;
cout << "status (menikah = 1, single = 0): ";
cin >> worker->Status;
if(worker->Status == 1) {
cout << "jumlah anak: ";
cin >> worker->Child;
} else {
worker->Child = 0;
}
cout << endl;
}
int main() {
Worker worker1, worker2, worker3;
InputWorkerData(&worker1);
InputWorkerData(&worker2);
InputWorkerData(&worker3);
return 0;
}
输出:
Nama: michael jordan
Gaji per bulan: 7000
status (menikah = 1, single = 0): 1
jumlah anak: 3
Nama: Gaji per bulan: 5000
status (menikah = 1, single = 0): 0
Nama: Gaji per bulan: 9000
status (menikah = 1, single = 0): 1
jumlah anak: 2
解决方案
混合面向行和面向项目的输入会(而且经常会)导致这样的问题。
这似乎符合典型情况:使用 读取一个项目(在本例中为数字)>>
后,输入缓冲区中仍有一个换行符。当您调用 时getline
,它会将换行符视为空行的结尾。
有几种方法可以避免这个问题。一种常见的、众所周知的方法是getline
在整个过程中一次读取一行输入,然后使用(一种可能性) alexical_cast
将数据从字符串转换为您实际想要读取的类型。
推荐阅读
- angular - 路由器导航后,您可以保持角度延迟加载的组件“活动”吗?
- c# - 反序列化 XML 数据时获取空值
- spring-boot - StreamListener 或条件延迟
- java - 如何在 JUnit 测试中访问空手道配置参数?
- mongodb - 乘以行和搜索查询
- python - 使用 .fit() 修复未在 Eager 模式下运行的 Tensorflow 模型很热门?
- azure-devops - 如何分析 Azure DevOps 中的用户生产力?
- c# - 将项目添加到数据网格的集合中
- weblogic - Web 逻辑服务器 Breach Help!如果访问了任何数据,如何查找哪些数据的迹象?
- go - 在将其导入 BigQuery 之前,CSV 中的日期格式