使用getc读取文件,如果以分号开头则跳过一行

时间:2015-09-26 02:31:30

标签: c

.lol-promo.left,
.lol-promo.right {
   position: absolute;
  -moz-transform: scale(1, -1);
  -webkit-transform: scale(1, -1);
  -o-transform: scale(1, -1);
  -ms-transform: scale(1, -1);
  transform: scale(1, -1);
}
.lol-promo.left{
   bottom: 0; left: 0;
}
.lol-promo.right {
  bottom: 0; right: 0;
  background-position: -95px 0;
  right: 0px;
}

如果行的第一个字符是分号,我可以使用getc完全跳过一行吗?

2 个答案:

答案 0 :(得分:4)

您的代码包含对-1的一些引用。我怀疑您认为EOF-1。这是一个共同的价值,但只需要一个负值 - 任何适合int的负值。在职业生涯开始时不要养成坏习惯。将EOF写在EOF所在的位置(并且不要在EOF处查看-1

int c;

while ((c = getc(file)) != EOF)
{
    if (c == ';')
    {
        // Gobble the rest of the line, or up until EOF
        while ((c = getc(file)) != EOF && c != '\n')
            ;
    }
    else
    {
        do
        {
            //Here I do my stuff
            …
        } while ((c = getc(file)) != EOF && c != '\n');
    }
}

请注意,getc()会返回int,因此c被声明为int

答案 1 :(得分:3)

我们假设“line”表示一个字符串,直到您点击指定的行尾字符(此处假设为\r\n,不同的系统使用不同的字符或字符序列,如{{1} })。然后,当前字符c是否在分号开始行中变为状态信息,您需要在while - 循环的不同迭代中维护该状态信息。例如:

bool is_new_line = true;
bool starts_with_semicolon = false;
int c;
while ((c = getc(file) != EOF) {
  if (is_new_line) {
    starts_with_semicolon = c == ';'; 
  }
  if (!starts_with_semicolon) {
    // Process the character.
  }
  // If c is '\n', then next letter starts a new line.
  is_new_line = c == '\n';
}

代码只是为了说明原理 - 它没有经过测试或其他任何东西。