C:忽略输入文件中的注释行

时间:2011-05-07 16:51:29

标签: c input line ignore

我使用fscanf函数来处理输入。现在在输入中,每个以#开头的行必须被忽略。我怎么忽略一条完整的线?例如这个输入:

#add some cars
car add 123456 White_Mazda_3 99 0
car add 123457 Green_Mazda_3 101 0
car add 111222 Red_Audi_TT 55 1200

#let see the cars
report available_cars

#John Doe takes a white mazda
customer new 123 JohnDoe
customer rent 123 123456

#Can anyone else take the mazda?
report available_cars

#let see Johns status
report customer 123

如你所见,注释的长度可能会有所不同,而且命令的结构会有所不同......有没有办法区分两条线?或者告诉我们什么时候我们在一条线的结束/开始?

2 个答案:

答案 0 :(得分:4)

而不是使用fscanf(),请使用fgets()读取行并使用sscanf()替换fscanf()

char s1[13], s2[4], s3[17], s4[43];
char line[1000];
while (fgets(line, sizeof line, stdin)) {
    if (*line == '#') continue; /* ignore comment line */
    if (sscanf(line, "%12s%3s%16s%42s", s1, s2, s3, s4) != 4) {
        /* handle error */
    } else {
        /* handle variables */
    }
}

答案 1 :(得分:2)

使用fgets()代替fscanf()进行面向行的输入而不是自由格式输入。