与scanf()的阅读时间 - 如何不顾输入的一部分

问题描述:

我有以下数据:
10:15:14 D
00:15:14 T
00:15:14 G与scanf()的阅读时间 - 如何不顾输入的一部分

和七个变量:

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

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

如何同时使用scanf()无视":"

+1

不要使用'scanf'使用'istream'。 – 2013-03-19 13:22:52

+0

请显示一些源代码。另外scanf不是C++。 – 2013-03-19 13:23:40

+0

@Aki Suihkonen'cstdio' – Qbik 2013-03-19 13:24:11

你可以不喜欢它

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更多。

读​​你会看到它的那样简单

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); 

您可以使用垃圾变量扫描“:”与%C

scanf("%1d%1d%c%1d%1d%c%1d%1d", &h1, &h2, &trash, &m1, &m2, &trash, &s1, &s2); 

一部分,但是,我也投不使用scanf函数,并使用更强大的输入解析器(取决于您所使用的上下文它在)

+0

-1:你不需要垃圾变量。向格式字符串添加一个'*',比如'%* c'放弃它。 – 2013-03-19 13:52:34