首页 > 解决方案 > 第一次输入后字符串输入被忽略

问题描述

我试图在函数内输入字符串,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

标签: c++

解决方案


混合面向行和面向项目的输入会(而且经常会)导致这样的问题。

这似乎符合典型情况:使用 读取一个项目(在本例中为数字)>>后,输入缓冲区中仍有一个换行符。当您调用 时getline,它会将换行符视为空行的结尾。

有几种方法可以避免这个问题。一种常见的、众所周知的方法是getline在整个过程中一次读取一行输入,然后使用(一种可能性) alexical_cast将数据从字符串转换为您实际想要读取的类型。


推荐阅读