【问题标题】:I want to control file pointer location我想控制文件指针位置
【发布时间】:2019-10-04 08:41:16
【问题描述】:

我想找到重复的整数并用空格替换它们的位置。这是我的作业。但是我没有解决这个问题。 我的代码是

int main(){

    int control_integer;
    int temp_integer;
    int flag = 0;
    int location;
    char space = ' ';
    char control_end_of_file;

    FILE *fp,*tp;

    fp = fopen("file.txt","r+");

    while(!feof(fp))
    {

        fscanf(fp,"%d",&control_integer); 
        printf("control_integer: %d\n",control_integer );

        while(!feof(fp)){

            fscanf(fp,"%d",&temp_integer);
            printf("temp_integer = %d\n",temp_integer );

            if (temp_integer == control_integer)
            {
                flag = 1;
                printf("girdi integer: %d\n",temp_integer );
                fprintf(fp, "  %c ",space );
            }
        }
    }
    return 0;
}

我计划我的功能如下。首先,我在文件中获取一个元素,然后进入一个新循环并查看下一个元素。如果相等,我想用空格替换它。但是问题就出现在这里。 * fp,执行读取操作时,传递了下一个元素,但我想阻止它并将其他内容写入该位置。所以我想在同一个地方写和删除。我尝试了一些东西,但我做不到。

【问题讨论】:

  • 这是最慢的解决方案。看看 fseek(...)。您可能还需要考虑:先读取整个文件,更改内存中的内容,将整个文件写入磁盘,替换或覆盖现有文件
  • 您使用的是 POSIX 系统(linux/unix 等)吗?如果是,在这种情况下我更喜欢mmap(2)。
  • (1) 你应该记录你已经看到的数字,这样你就不必从头开始重新扫描(使用malloc()等的动态内存分配——你有吗?了解这些了吗?)(2)您通常会使用fseek() 和ftell() 重新定位读/写指针。在读取数字之前,您需要跟踪当前位置;读取数字后的当前位置;然后如果是重复,则返回到前位置并写入适当数量的空格以返回到后位置。或者,最好将唯一编号复制到新文件中。
  • 好的,我会尽快尝试,谢谢。我想在没有数组的情况下这样做。

标签: c file pointers memory-management


【解决方案1】:

首先我在文件中取一个元素,...

我认为在这种情况下int x; x = getc() 就足够了。例如:

while((x = getc(fp)) != EOF){printf("do something");};

【讨论】:

  • 请注意,} 后面的分号表示循环后空语句的结束。这是毫无意义的,虽然没有正式错误。
  • 好的,你可以试试。但这是另一个解决方案,它与您的代码没有太大变化:dpaste.com/38JRSMH
猜你喜欢
  • 2012-09-15
  • 2012-02-15
  • 2017-02-02
  • 2012-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多