c++ - 如何使 std::cin 只读取输入的一部分?
问题描述
我正在制作一个程序,它应该从一行输入中读取一个或两个数字。它看起来像这样:
int N = 0;
cin >> N;
int data[100];
for(int i=0; i<N; i++)
{
cin.ignore(5, ' ') >> data[i];
}
for(int i=0; i<N; i++)
{
cout << data[i] << endl;
}
和输入:
3
1111 22 3 4444 5555
1111 2 3 4444 5555
1111 22 33 4444 5555
第一个输入是程序应该期望的行数。之后,每个输入行看起来像上面的那些。从中,我想提取 2s 或 22s。我已经了解cin.ignore
了我可以告诉程序跳过一定数量的字符并指定和结束字符(我认为?)。第 6 个应该是第一个字符,22 或 2 之后的空格应该是它停止的地方。如果我在数组上方输入输入,则会像这样填充:
22
3
4444
我输入后程序已经停止
3
1111 22 3 4444 5555
我是一个非常非常初学者,我很确定我搞砸了一些非常明显的东西,但我不知道是什么。
解决方案
阅读所有内容并丢弃除您需要的所有内容:
// ...
for(int i=0; i<N; i++)
{
int dummy;
std::cin >> dummy >> data[i] >> dummy >> dummy >> dummy;
}
// ...
推荐阅读
- c# - “IApplicationBuilder”不包含“UseWebAssemblyDebugging”的定义
- sql - 在 sqlite 中查询 Where 子句的结果
- excel - 自从使用 Excel 2019 迁移到 Windows10 并在家工作后,网络文件随机受到影响
- c - ai_next 链表中的 C 空指针检查失败
- android - Google Play - 内部测试人员如何查看生产版本?
- sql-server - 在 SQL Server 中将分隔字符串拆分为多个列
- python - 尝试使用 pandas read_html 在页面上使用第二个表时出现 IndexError
- python-3.x - Python 3 try-except:哪种解决方案更好,为什么?
- javascript - Vuejs - 将模板的标题部分移动到父级
- azure - Azure redis 集群键事件失效事件