C++的简单输入/输出查询

A Simple input/output query of C++

本文关键字:输出 查询 输入 简单 C++      更新时间:2023-10-16

我必须把它作为输入:


3 山 姆

99912222 汤姆

11122222 哈利

12299933

所以,我写下了以下代码:

string s;
int num,n;
cin>>n;
while(n--){
    getline(cin,s);
    cin >> num;
    cout << "s=" << s << " num=" << num << endl;
}

因此,预期输出应为:

s=山姆数=99912222
s=汤姆数=11122222
s=哈利·努姆=12299933

但输出是:

s= 数字=0
s= 数字=0
s= 数字=0

我哪里做错了?

一个问题是获取计数的 cin>>n; 语句在输入缓冲区中留下换行符。因此,当您调用getline时,它会看到该换行符并认为您输入了空行。

然后,当您尝试读取数字时,情况会变得更糟,因为下一个文本不是数字,而是名称,尝试将其读取为数字将设置failbit

标准解决方案是在换行符之前忽略字符,这将跳过该行的其余部分,包括换行符。所以做类似的事情

std::cin >> n;
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), 'n');

当然,在其他输入之后,您也需要它。