加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 文件读写到同一个文件?

发布时间:2020-12-16 03:27:37 所属栏目:百科 来源:网络整理
导读:我已经设法打开一个文件并在使用var = fopen(文件,“r”)/“w”写入另一个文件时读取,但即使使用r或w模式,我也无法打开文件并更改其内容. 想象一下: int formatacao (char original[]){/*se a cadeia nao tiver escrita em maiusculas,esta fun?ao vai alte
我已经设法打开一个文件并在使用var = fopen(文件,“r”)/“w”写入另一个文件时读取,但即使使用r或w模式,我也无法打开文件并更改其内容.

想象一下:

int formatacao (char original[]){/*se a cadeia nao tiver escrita em maiusculas,esta fun?ao vai alteralas para tal*/
    int val1;
    FILE * original_open;

    original_open = fopen (original,"r+");

    if (original_open==0){
       printf ("ficheiro %c 1.",original);
    }


    while ((val1=fgetc(original_open))!=EOF){
          if (val1>='a'&&val1<='z'&&val1){
             fputc(val1-32,original_open);
          }
          else 
          fputc(val1,original_open);
    }

    fclose (original_open);
    return (0);
}

代码工作,没有错误,没有警告,唯一的问题是:如果我像这样使用它,它会删除文件中的内容但是这样可行:

int main (){
    int val1,val2,nr=0;
    FILE* fp1;
    FILE* fp2;
    fp1=fopen ("DNAexample.txt","r");
    fp2=fopen ("DNAexample1.txt","w");
    if (fp1==0){
       printf ("EPIC FAIL no 1.n");
    }
    while ((val1=fgetc(fp1))!=EOF){
          if (val1>='a'&&val1<='z'&&val1){
             fputc(val1-32,fp2);
          }
          else 
          fputc(val1,fp2);
    }


    fclose (fp1);
    fclose (fp2);
    return (0);
}

完美!如何打开文件,通过char读取char并确定是否要更改char?

解决方法

除非在输入中找到EOF,否则您需要在输出和输入之间插入文件定位功能.

这对我有用:

#include <stdio.h>

int formatacao (char *original) {
  int val1;
  FILE *original_open;
  int write_at,read_at;

  original_open = fopen(original,"r+");
  if (original_open == 0) {
    printf("ficheiro %sn",original);
  }
  write_at = read_at = 0;
  while ((val1 = fgetc(original_open)) != EOF) {
    read_at = ftell(original_open);
    fseek(original_open,write_at,SEEK_SET);
    if (('a' <= val1) && (val1 <= 'z')) {
      fputc(val1 - 32,original_open);
    } else {
      fputc(val1,original_open);
    }
    write_at = ftell(original_open);
    fseek(original_open,read_at,SEEK_SET);
  }
  fclose(original_open);
  return (0);
}

int main(void) {
  formatacao("5787867.txt");
  return 0;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读