【问题标题】:Issue using strtok to validate a user-entered date in C使用 strtok 验证 C 中用户输入的日期的问题
【发布时间】:2015-10-21 18:30:06
【问题描述】:

我正在尝试验证用户在 C 中输入的日期。但是,我似乎无法让 strtok 用“-”分隔符分隔。例如,我想验证用户是否以 mm/dd/yyyy-hh:mm 格式正确输入了日期,其中 hh 是小时的 2 位数表示,mm 也是 2 位数的小时后分钟。

这就是我一直在做的。

 char* input[] //--user input

 char* token[];//-- used to seperate each portion and verify them individually.

 token = strtok(input, " /-:"); //-- token is now the mm.
 ...todo

token = strtok(NULL, "/"); //---token is now the dd.
...todo

token = strtok(NULL, "/"); //---token is now the yyyy.
...todo

我在每一步都使用 prinf 令牌进行验证,一切运行顺利,直到我尝试到达 hh。

问题出在这里:当我尝试打电话时

token = strtok(NULL, "-") //for the hours in a valid input

令牌为 NULL。在 todo 中,我验证令牌不为空,但在这种情况下,即使我输入有效日期也是如此。

【问题讨论】:

  • char * input[] 是指针数组的声明(如果您添加分号),这可能不是您想要的。请贴出真实代码。

标签: c validation token tokenize delimiter


【解决方案1】:

你可以考虑使用

if ( sscanf ( input, "%d/%d/%d-%d:%d", &mm, &dd, &yyyy, &hr, &m) == 5)

格式字符串扫描一个int、一个'/'、一个int、一个'/'、一个int、一个'-'、一个int、一个':'和一个int。如果所有项目都扫描成功,则返回5。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-28
    • 1970-01-01
    • 1970-01-01
    • 2013-09-15
    • 1970-01-01
    • 2021-10-14
    • 2019-07-22
    相关资源
    最近更新 更多