我想读取与此类似的输入行
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以便我每次都不要从头开始阅读。提前感谢您的时间。
答案 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 != ':')
请注意,firstSemi
和secondSemi
必须是char
类型才能以这种方式使用。