如何在文件中向下移动?

  • 本文关键字:移动 文件 c++ c
  • 更新时间 :
  • 英文 :


我可以从文件中读取行或字符。如何在文件中向下和向左或向右移动?

  1. 您将从顶部开始,向下移动到相邻的数字,如下所示。

  2. 您只能向下和对角线行走。

  3. 你只能走过非质数。

    *1 
    *8 4
    2 *6 9
    8 5 *9 3
    

所以我需要先阅读 1,然后是 8,然后是 6,然后是 9。但我不知道如何阅读下面的字符。

文件是按顺序存储的,行是文本编辑器的错觉,它用""字符将它们分开。 要在文件中">向下移动",您需要从您所在的行的开头存储您的位置,然后跳到下一个"">

int result;
do {
result = getc(f);
} while(result != 'n' && result != EOF);

然后按该数字移动fseek(f, columnPosition, SEEK_CUR)(参考(。 这也回答了您在文件中如何"向左或向右移动">的问题:

fseek(f, -1, SEEK_CUR); //move left
fseek(f, 1, SEEK_CUR); //move right

此外,您应该考虑将文件存储在某种缓冲区中,它更容易使用,并且从 RAM 读取速度更快。 您也可以以这种方式将每一行放入字符串数组中,但这会更加困难。这是你这样做的方式:

//counting all characters
size_t bufferLen = 1;
while(fscanf(f, "%*c") != EOF)
++bufferLen;
//allocating space for your buffer
char* buffer = (char*)malloc(bufferLen * sizeof(char));
//starting over again
rewind(f);
//copying the file into the buffer
char c;
size_t i;
for(i = 0; fscanf(f, "%c", &c) != EOF; i++)
{
buffer[i] = c;
}
buffer[i] = '';

现在,您有一个缓冲区可以通过直接访问进行读取。

我试图快速编写代码。 该代码包含标有星号的所有数字。我在编写代码时使用了动态内存管理。但我认为我后面看到的数字一定是质数。如果你在代码上做一点工作,我认为你可以写完整版。

#include <stdio.h>
#include <stdlib.h>
void read_file(const char *);
int main()
{
read_file("test.txt");
}
void read_file(const char *filename) {
int c;
int flag = 0;
int count = 0;
int *p = malloc(sizeof(int));
FILE *f = fopen(filename, "r");
while((c = fgetc(f)) != EOF) {
if('*' == c) {
flag = 1;
continue;
}
if(flag == 1 && ' ' != c) {
count++;
p = (int *)realloc(p, count*sizeof(int));
p[count-1] = c - 48; 
}
if(' ' == c && count != 0 ) {
for(int i = 0; i < count; ++i) {
printf("%d", p[i]);
}
printf("n");
flag = 0;
count = 0;
}
}
free(p);
fclose(f);
}

最新更新