使用getc读取文件并跳过以分号开头的行
如果行的第一个字符是分号,我可以使用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
\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');
}
}