小心不是小白 2022-10-21 16:11 采纳率: 100%
浏览 167
已结题

从文件中读取多行字符串

无法从文件中读取字符串

#include <stdio.h>
#include<stdlib.h>
#include<string.h>
int f(int i, int k)//以第i个字符打头的长度不超过k的升序字符串个数为f(i,k)
{
    int count = 0,j;
    if (k == 1)
        return 1;
    else
        for (j = i+1; j <= 26; j++)
            count += f(j, k - 1);
    return count;
}

int g(int k)//长度不超过k的升序字符串总个数为g(k)
{
    int i,sum=0;
    for (i = 1; i <= 26; i++)
        sum += f(i, k);
    return sum;
}

int main()
{
    FILE* fp1,*fp2;int k,m=0,i,j,t,num,x,n; char c,s1[8];//k为字符串个数,m为字符串长度
    fopen_s(&fp1,"input.txt","r");
    fopen_s(&fp2,"output.txt","w+");
    if (fp1 == NULL)
    {
        printf("Fail to open file!");
        exit(0);
    }
    
    fscanf_s(fp1,"%d", &k);
    printf("%d\n", k);
    c = fgetc(fp1);

    while(k--)
    {
        fscanf_s(fp1, "%s", &s1);
        printf("%s\n", s1);
        c = fgetc(fp1);
        num = 0;
        m = strlen(s1);//字符串长度
        for (i = 1; i < m; i++)//先把所有长度小于所求字符串长度的字符的个数求出来
            num += g(i);
        for (i = 0, t = 0; i < m; i++)
        {
            x = s1[i] - 'a' + 1;//下一位字符的顺序数
            n = m - i;//获取当前长度
            for (j = t + 1; j < x; j++)
                num += f(j, n);
            t = x;
        }
        fprintf(fp2, "%d\n", num+1);
    }
    fclose(fp1);
    fclose(fp2);
    return 0;
}


运行不出结果

img

img

  • 写回答

3条回答 默认 最新

  • 伍六七0804 2022-10-21 16:21
    关注

    读取一行直接用fgets函数就行啊

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

报告相同问题?

问题事件

  • 系统已结题 10月29日
  • 已采纳回答 10月21日
  • 创建了问题 10月21日

悬赏问题

  • ¥170 如图所示配置eNSP
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥15 键盘指令混乱情况下的启动盘系统重装