用scanf()读取小时 - 如何忽略部分输入

时间:2013-03-19 13:22:07

标签: c++

我有以下数据:
10:15:14 D
00:15:14 T
00:15:14 G

和七个变量:

int h1,h2,m1,m2,s1,s2;
char mark;

第一行数据的输出应为:
h1==1
h2==0
m1==1
m2==5
s1==1
s2==4
mark=='D'

如何在使用":"时忽略scanf()

3 个答案:

答案 0 :(得分:3)

你可以这样做

int h1,h2,m1,m2,s1,s2;
h1 = h2 = m1 = m2 = s1 = s2 = 0;
char mark;
if (scanf("%1d%1d:%1d%1d:%1d%1d %c", &h1, &h2, &m1, &m2, &s1, &s2, &mark) != 7)
{
    //some error handling
}

对数字使用不同的变量而不是小时,分钟和秒,这确实很奇怪,比如

scanf("%d:%d:%d %c", &h, &m, &s, &mark);

对于那些评论cstdio已经过时的人,我个人比iostream更喜欢它。

答案 1 :(得分:1)

阅读docs,您会发现它就像

一样简单
int h, m, s;
char mark;
const char* buf = "00:15:14 D";
sscanf(buf, "%d:%d:%d %c", &h, &m, &s, &mark);
fprintf(stdout, "h = %d, m = %d, s = %d, mark = %c\n", h, m, s, mark);

答案 2 :(得分:0)

您可以使用垃圾变量来扫描带有%c

的':'部分
scanf("%1d%1d%c%1d%1d%c%1d%1d", &h1, &h2, &trash, &m1, &m2, &trash, &s1, &s2);

但是,我也投票不使用scanf并使用更强大的输入解析器(取决于你使用它的上下文)