纯纯的小白dd 2022-12-25 13:16 采纳率: 65%
浏览 41
已结题

C语言文件输入问题求

题目:DNA 序列还原。某生物学文件内容为多条长度不等 DNA 序列,为书写方便其中有些片段用小括
号括起并跟一个 int 数字,表示该片段需要重复多次。如“(AGG)3”表示“AGG”片段需要重
复 3 次,请按要求将源文件还原后写入新的文件中。注意:括号内的 DNA 片段长度不定长,重
复次数可能是个多位数。
但下面的代码运行后,在目标文件没输入内容。


#include<stdio.h>
#include<string.h>
#define _CRT_SECURE_NO_WARNINGS
int main()
{
    FILE* fp1;
    errno_t err1 = fopen_s(&fp1, "D://source.txt", "r");                                                      /*以读的形式打开简写文件*/
    if (fp1 == NULL)
    {                                                                                                                                      /*打不开报错*/
        printf("Erro 1!");
        return 1;
    }
    char a[200];
    char b[100];
    fscanf_s(fp1, "%s", a);        /*提取字符串*/
    fclose(fp1);
    FILE* fp2;
    errno_t err2 = fopen_s(&fp2, "D://target.txt", "w");                               /*以写的形式打开需要输入的文件*/
    if (fp2 == NULL) 
    {
        printf("Erro 2!");         /*打不开报错*/
        return 2;
    }
    int i = 0, j = 0, k, l, m;
    while (a[i] != '\0')
    {        /*遍历所有元素*/
        if (a[i] == '(') 
        {        /*判断左括号的出现*/
            b[100] = { 0 };
            i++;
            while (a[i] != ')')
            {        /*在遍历到有括号之前储存中间的所有元素*/
                b[j] = a[i];
                j++;
                i++;
            }
            i++;
            m = a[i] - 48;        /*用ASC码形式获得重叠字符串需要循环的次数*/
            for (l = 0; l < m; l++) {
                for (k = 0; k < j; k++) {
                    fprintf(fp2, "%c", b[k]);        /*循环输出*/
                }
            }
            i++;
        }
        else {
        }
        fprintf(fp2, "%c", a[i]);        /*其余元素正常输出*/
        i++;
    }
    fclose(fp2);        /*关闭写入文件*/
    return 0;
}
  • 写回答

2条回答 默认 最新

  • |__WhoAmI__| 2022-12-25 14:25
    关注

    在你的代码中,在 while 循环中没有处理输入字符串中没有括号的情况。因此,当遍历到没有括号的字符时,else 语句块中的内容不会执行,导致目标文件没有输入内容。

    为了解决这个问题,可以在 else 语句块中添加对字符的输出,例如:

    else {
        fprintf(fp2, "%c", a[i]);
    }
    

    另外在你的代码中,使用了一个长度为 100 的字符数组 b 来储存括号内的字符串。然而在使用 b 时将数组全部赋值为 0,这会导致 b 中所有元素都被覆盖。可以将这一行代码删除,以便 b 中储存的是括号内的字符串。
    望采纳

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 1月3日
  • 已采纳回答 12月26日
  • 创建了问题 12月25日

悬赏问题

  • ¥15 ansys fluent计算闪退
  • ¥15 有关wireshark抓包的问题
  • ¥15 需要写计算过程,不要写代码,求解答,数据都在图上
  • ¥15 向数据表用newid方式插入GUID问题
  • ¥15 multisim电路设计
  • ¥20 用keil,写代码解决两个问题,用库函数
  • ¥50 ID中开关量采样信号通道、以及程序流程的设计
  • ¥15 U-Mamba/nnunetv2固定随机数种子
  • ¥15 vba使用jmail发送邮件正文里面怎么加图片
  • ¥15 vb6.0如何向数据库中添加自动生成的字段数据。