秋分夜雨 2022-04-22 10:19 采纳率: 75%
浏览 249
已结题

oj关于C语言文本文件处理

求解惑
题目就是这样,没有增加我个人的任何东西
我知道这是java的程序,也不理解为什么题目这样出,但要用c语言的方法解决问题

题目描述
已知一个文本文件,文件名为dict.dic。它是由下边的代码生成。
    int a ;
    boolean b = true ;
    double c , f ;
    String d ;
    PrintWriter out = new PrintWriter("dict.dic");
    Scanner cin = new Scanner(System.in);
    for (int i = 0 ; i < 5 ; i ++ ) {
         a = cin.nextInt() ;
         f = Math.random() ;
         if ( f > 0.5 ) b = true ;
         else b = false ;
         c = cin.nextDouble() ;
         d = cin.next() ;
         out.println(a) ;
         out.println(b) ;
         out.println(c) ;
         out.println(d) ;
    }
    out.close(); // Remember this!
    cin.close();
  }
你的任务是写一段程序,将这些内容读出来。
输入:
为一个整数,只可能是12345之一。
输出:
将dict.dic中的相关内容输出到屏幕上,如果输入是1,则输出那段代码第一次循环写入的内容,如果输入是2,则输出那段代码第二次循环写入的内容,依此类推。
形式如样例。double类型的不是保留一位小数,直接输出就可以了。
样例输入:
1
样例输出:
100
false
72.5
helloworld

  • 写回答

4条回答 默认 最新

  • GY Leo 2022-04-22 12:11
    关注
    
    struct sData{
        
        int i;
        char cb[100];
        double d;
        char c[100];
    };
    
    
    int ReadDataInfo(const char* filename, struct sData** pdata)
    {
        
        FILE *fp;
        char ch;
        int i=1,j;
        fp=fopen(filename,"r");
        if(fp==NULL)
        {
            printf("cann't open the file");
            exit(-1);
        }
        ch=fgetc(fp);
        while(ch!=EOF)
        {
           if(ch=='\n')
            {
                i++;
            }
            ch=fgetc(fp);
        }
        rewind(fp);
        
        char buf[100]={0};
        char *ptr;
        *pdata=(struct sData*)malloc(sizeof(** pdata)*(i/4));
        
        for(j=0;j<i/4;j++)
        {
            memset(*pdata+j,0,sizeof(struct sData));
            fgets(buf,100,fp);
            (*pdata+j)->i = atoi(buf);
            
            fgets(buf,100,fp);
            
            for (int m=0;m<strlen(buf)-1;m++)
            {
                (*pdata+j)->cb[m] = buf[m];
            }
    
            fgets(buf,100,fp);
            (*pdata+j)->d = strtod(buf,&ptr);
            
            fgets(buf,100,fp);
            for (int m=0;m<strlen(buf)-1;m++)
            {
                (*pdata+j)->c[m] = buf[m];
            }
        
        }
        fclose(fp);
    
        return i/4;
    }
    
    int main ()
    {
        
        int i,count;
        int m;
        struct sData *list;
        
          count=ReadDataInfo("c:\\1.txt", &list);
          
          printf("Input the number");
          scanf("%d", &i);
          
          if(i>0 && i<=count)
          {
              printf("%d\n",list[i-1].i);
              printf("%s\n",list[i-1].cb);  
              printf("%lf\n",list[i-1].d);  
              printf("%s\n",list[i-1].c); 
          }
    
    
         free(list);
         list = NULL;
        
        return 0;
    }
    

    img

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

报告相同问题?

问题事件

  • 系统已结题 4月30日
  • 已采纳回答 4月22日
  • 修改了问题 4月22日
  • 修改了问题 4月22日
  • 展开全部

悬赏问题

  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测