C 如何在使用fgets()读取一行后移回上一行的起始位置?
例如,如果文件包含:C 如何在使用fgets()读取一行后移回上一行的起始位置?,c,file,io,C,File,Io,例如,如果文件包含: 12345 -3445654 1245646 我想使用fgets()将第一行读入字符串。然后我也要读第二行,检查第一个点是否有'-'。如果有,我将阅读第二行,并将其读到第一行 然后我想再次使用fgets()读取第三行。这次当没有'-'时,我只想使文件返回到第三行的开头,以便下次调用fgets()时,它将再次读取相同的第三行 有什么方法可以做到这一点吗?使用fgetc读取下一行的第一个字符,如果它不是“-”,则使用ungetc将其放回。使用fgetc读取下一行的第一个字符,
12345
-3445654
1245646
我想使用fgets()
将第一行读入字符串。然后我也要读第二行,检查第一个点是否有'-'
。如果有,我将阅读第二行,并将其读到第一行
然后我想再次使用fgets()
读取第三行。这次当没有'-'
时,我只想使文件返回到第三行的开头,以便下次调用fgets()
时,它将再次读取相同的第三行
有什么方法可以做到这一点吗?使用fgetc读取下一行的第一个字符,如果它不是“-”,则使用ungetc将其放回。使用fgetc读取下一行的第一个字符,如果它不是“-”,则使用ungetc将其放回。通常,您只需保持文件的一部分处于读取状态,直到你确定你不再需要它 或者,您可以将整个文件读入缓冲区,然后尽可能多地使用指针进行跳转
或者,如果您确实需要,您可以使用更多当前流位置,然后重新读取所需的部分。通常,您只需将刚刚读取的文件部分保留在内存中,直到您确定不再需要它为止 或者,您可以将整个文件读入缓冲区,然后尽可能多地使用指针进行跳转 或者,如果您确实需要,您可以使用更多当前流位置,然后随时重新阅读所需的部分。
char prevline[whateversize];
然后,在步骤1和步骤2之间的某个地方
strcpy(prevline, line);
(当然,您必须确保line
和prevline
变量的分配是一致的,例如作为相同大小的数组,这样溢出就不会成为问题。)只要我愿意
char prevline[whateversize];
然后,在步骤1和步骤2之间的某个地方
strcpy(prevline, line);
(当然,您必须确保
line
和prevline
变量的分配是一致的,例如作为相同大小的数组,因此溢出不是问题。)C的IO机制被有意地称为“stream”IO。如果输入看起来像下面这样,您希望发生什么(字符代表换行):12345/-3445654/-1245646
?或者,如果您读取的第一行以'-'
开头,您希望能够在无法执行seek()
操作的流上执行此操作吗?我不明白这个问题。您说“我想再次读取第三行”但是第一段没有说它读第三行,它只读第一行和第二行。如果你真的想回去,在读这行之前使用ftell()
,而不是使用fseek()
回到你调用ftell()
时的位置。C的IO机制称为“流”IO故意。如果输入看起来像以下内容('/'
字符表示换行):12345/-3445654/-1245646
,或者如果读取的第一行以'-'
开头,您希望如何处理?您希望能够在无法执行搜索()的流上执行此操作吗
operation?我不明白这个问题。你说“我想再读第三行”。但是第一段没有说它读第三行,它只读第一行和第二行。如果你真的想回去,在读这行之前使用ftell()
,而不是使用fseek()
返回调用ftell()时的位置。
如果不是“-”,而是查找选项卡“\t”在字符串的开头。单个ungetc是否也会将其放回原来的位置?或者,由于制表符占用许多空格,我必须多次取消etc。制表符字符只是一个字符。@Brandon:阅读函数的手册页!ungetch
不保证取消设置超过一个字符。如果“-”,我查找选项卡“\t”“在字符串的开头。单个ungetc是否也会将其放回原来的位置?或者,由于制表符占用许多空格,我必须多次取消etc。制表符只是一个字符。@Brandon:阅读函数的手册页!ungetch
不保证取消设置超过一个字符。