如果我看到背对着同一个角色,那就离开了

时间:2015-09-21 23:44:45

标签: c

我想读取与此类似的输入行

1234-56789   11:22:33:44: .... :88 

其中右侧最多可以有8个双位整数。如果整数不足,则采用以下格式

1234-56789   11:22:33:: 

最后一位数字后面跟着两个冒号。我试过以下

while((Line + tot) != ':' && (Line + tot + 1) != ':')
while(Line + tot && (Line + tot + 1) != ':')
while(sscanf(Line + tot, "%c%c", &firstColon, &secondColon) != 2)

在扫描两个冒号之后,我上面的所有三行都继续进入while循环,这是我不想要的,因为我知道我没有更多的整数可以跟随。随着第三个while循环,我100%肯定我将冒号分配到各自的位置,因为我打印了它们的值但是我仍然不确定为什么它继续进行...我使用tot作为我的arrayIndex以便我每次都不要从头开始阅读。提前感谢您的时间。

1 个答案:

答案 0 :(得分:1)

while((Line + tot) != ':' && (Line + tot + 1) != ':')
while(Line + tot && (Line + tot + 1) != ':')

这些是错误的,因为Line + tot是一个指针而不是':' 此外,a != ':' && b != ':'a = '1', b = ':'变为假。 这意味着这不是检查是否有两个分号的好表达。

while(sscanf(Line + tot, "%c%c", &firstSemi, &secondSemi) != 2)

这是错误的,因为这只检查是否只有零个或一个字符。

试试这个:

while(*(Line + tot) != ':' || *(Line + tot + 1) != ':')
while(sscanf(Line + tot, "%c%c", &firstSemi, &secondSemi) != 2 || firstSemi != ':' || secondSemi != ':')

请注意,firstSemisecondSemi必须是char类型才能以这种方式使用。