纯纯的小白dd 2022-12-25 13:16 采纳率: 57.1%
浏览 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日

悬赏问题

  • ¥20 java在应用程序里获取不到扬声器设备
  • ¥15 echarts动画效果的问题,请帮我添加一个动画。不要机器人回答。
  • ¥60 许可证msc licensing软件报错显示已有相同版本软件,但是下一步显示无法读取日志目录。
  • ¥15 Attention is all you need 的代码运行
  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事:
  • ¥15 前置放大电路与功率放大电路相连放大倍数出现问题
  • ¥80 部署运行web自动化项目
  • ¥15 腾讯云如何建立同一个项目中物模型之间的联系
  • ¥30 VMware 云桌面水印如何添加