gpt4 book ai didi

c - 使用 sscanf 从数字中读取数字

转载 作者:太空宇宙 更新时间:2023-11-04 06:47:20 25 4
gpt4 key购买 nike

我正在尝试使用 sscanf 读取/提取两位数字。面临一些问题。

char* str = "2019/05/28";
int x,y,z;
sscanf(str, "%d/%d/%d", &x, &y, &z);
It reurns me o/p as 2019, 05, 28 which is ok.

但是 从 2019 年开始 我只想提取 19

我试过 %2d 它返回 20。而且我还需要检查月份是否也是两位数我尝试了所有可能的方法但还没有成功。

请帮忙。

更新:我也尝试了 %2d%d -> 这给了我 19。但是不确定我是总是得到 4 位数还是 2 位数

输入可以是 char* str = "19/05/28";

最佳答案

鉴于您希望在 sscanf 中完成,可以这样完成:

if (sscanf(str, "%*2d%2d/%2d/%2d", &y, &m, &d) != 3)
goto err;

编辑:

添加一些支票作为例子:

if (sscanf(str, "%*2d%2d/%2d/%2d", &y, &m, &d) != 3)
goto err;
if (sscanf(str, "%4d", &tmp) != 1)
goto err;
if (tmp < 1900)
goto err_year;

sscanf 有一个最大宽度字段,而不是一个精确宽度字段,所以你必须手动检查用户是否输入了 3 位数的年份,如果是则考虑怎么办

在这种情况下我不会使用它,因为您仍然需要读取四位数字来进行支票,所以 @chux 的解决方案在这种情况下是最好的解决方案:

if (sscanf(str, "%4d/%2d/%2d", &year, &m, &d) != 3)
goto err;
if (year < 1900)
goto err_year;
y = year % 100;

关于c - 使用 sscanf 从数字中读取数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56262630/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com