使用getc读取文件并跳过以分号开头的行

使用getc读取文件并跳过以分号开头的行,c,C,如果行的第一个字符是分号,我可以使用getc完全跳过一行吗?让我们假设“行”是指一个字符串,直到到达指定的行尾字符为止(这里假设为\n,不同的系统使用不同的字符或字符序列,如\r\n)。然后,当前字符c是否在分号起始行中,将成为一个状态信息,您需要在的不同迭代过程中对其进行维护,而-循环。例如: while((c = getc(file)) != -1) { if (c == ';') { //here I want to skip the line that s

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

让我们假设“行”是指一个字符串,直到到达指定的行尾字符为止(这里假设为
\n
,不同的系统使用不同的字符或字符序列,如
\r\n
)。然后,当前字符
c
是否在分号起始行中,将成为一个状态信息,您需要在
的不同迭代过程中对其进行维护,而
-循环。例如:

while((c = getc(file)) != -1)
{
    if (c == ';')
    {
        //here I want to skip the line that starts with ;
       //I don't want to read any more characters on this line
    }
    else
    {
            do
            {
                //Here I do my stuff 


            }while (c != -1 && c != '\n');//until end of file
    }
}
代码只是为了说明原理——它没有经过测试或其他任何东西。

让我们假设“行”指的是一个字符串,直到到达指定的行尾字符为止(这里假设为
\n
,不同的系统使用不同的字符或字符序列,如
\r\n
)。然后,当前字符
c
是否在分号起始行中,将成为一个状态信息,您需要在
的不同迭代过程中对其进行维护,而
-循环。例如:

while((c = getc(file)) != -1)
{
    if (c == ';')
    {
        //here I want to skip the line that starts with ;
       //I don't want to read any more characters on this line
    }
    else
    {
            do
            {
                //Here I do my stuff 


            }while (c != -1 && c != '\n');//until end of file
    }
}

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

您的代码包含对
-1
的一些引用。我怀疑您假定
EOF
-1
。这是一个常见的值,但它只需要是一个负值-任何适合
int
的负值。不要在职业生涯开始时养成坏习惯。在检查
EOF
的位置写入
EOF
(不要在检查
-1
的位置写入
EOF


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

您的代码包含对
-1
的两个引用。我怀疑您假定
EOF
-1
。这是一个常见的值,但它只需要是一个负值-任何适合
int
的负值。不要在职业生涯开始时养成坏习惯。在检查
EOF
的位置写入
EOF
(不要在检查
-1
的位置写入
EOF


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

是。哪一个字符在一行的末尾?你怎么找到的?你的线路有一个最大长度吗?在这种情况下,为什么不简单地使用
fgets
搜索字符串中的第一个非空格字符,看看它是否是分号,如果是分号,然后继续你的读取循环。如果你不读取行的读数,你将如何找到它的结尾?它可能是任何东西!若这一行并没有以分号开头,那个么getc将读取整行,直到下一个新行,并反复执行相同的操作,直到EOF。我该如何跳过以开头的那一行;正在困扰我。为了跳过以分号开头的那行,你需要阅读字符(不要对它们做任何事情),直到你看到一行的结尾。是的。哪一个字符在一行的末尾?你怎么找到的?你的线路有一个最大长度吗?在这种情况下,为什么不简单地使用
fgets
搜索字符串中的第一个非空格字符,看看它是否是分号,如果是分号,然后继续你的读取循环。如果你不读取行的读数,你将如何找到它的结尾?它可能是任何东西!若这一行并没有以分号开头,那个么getc将读取整行,直到下一个新行,并反复执行相同的操作,直到EOF。我该如何跳过以开头的那一行;正在困扰我。为了跳过以分号开头的那一行,你需要阅读字符(不要对它们做任何事情),直到你看到一行的结尾。我知道你的想法在哪里,会尝试一下,让你知道,谢谢分享。我知道你的想法在哪里,会尝试一下,让你知道,谢谢分享。
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');
    }
}