You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++中与指定格式scanf_s代码等效的cin实现方式是什么

等效实现

你给出的scanf_s要求输入严格匹配x=整数(mod 整数)的格式,直接用cin >>默认只会跳过空白字符,不会主动匹配固定格式文本,所以需要手动处理格式里的固定字符部分,以下是兼容C++11及以上版本的写法:

#include <iostream>
#include <limits> // 需引入该头文件使用numeric_limits

// 业务逻辑处代码
char tmp;
cin >> tmp;
if (tmp != 'x') cin.setstate(std::ios::failbit);
cin >> tmp;
if (tmp != '=') cin.setstate(std::ios::failbit);

cin >> a[i];

cin >> tmp;
if (tmp != '(') cin.setstate(std::ios::failbit);
cin >> tmp;
if (tmp != 'm') cin.setstate(std::ios::failbit);
cin >> tmp;
if (tmp != 'o') cin.setstate(std::ios::failbit);
cin >> tmp;
if (tmp != 'd') cin.setstate(std::ios::failbit);
cin >> tmp;
if (tmp != ' ') cin.setstate(std::ios::failbit);

cin >> b[i];

// 匹配格式末尾的换行,跳过剩余空白直到行尾,和原scanf中\n的效果一致
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

如果你的编译环境支持C++23,可以用标准库新增的std::scan,写法和scanf几乎完全一致,非常简洁:

#include <scan> // C++23新增头文件

std::scan(cin, "x={}(mod {})", a[i], b[i]);

说明

你之前使用的cin >> a[i] >> b[i]仅适用于输入值之间只用空白分隔的场景,不需要匹配额外固定文本。如果输入有自定义的格式分隔符,要么按照上面的方案手动匹配固定字符,要么用C++23的std::scan直接解析格式串即可。

内容的提问来源于stack exchange,提问作者GoAkshay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 12:06:02