鱼C论坛

 找回密码
 立即注册
查看: 1384|回复: 1

[已解决]C语言读取文件中的坐标

[复制链接]
发表于 2019-10-14 22:52:12 | 显示全部楼层 |阅读模式
2鱼币
大佬请教一下  怎么让txt的坐标 读取到结构体里面????



在 data.txt 里面
3
5.22   4.55
3.25   3.33
1.22   6.77

第一行 3 表示有三个坐标   第二到四行分别是各个坐标的xy值


以下是我的c文件.....

#include<stdio.h>
#include<stdlib.h>

typedef struct point point;
struct point
{
  float a;
  float b;
};

void sort(point nuage[],int n)  //坐标排序的函数
{
    int i,j;
    float x,y;
    for(i=0;i<n-1;i++){   // Bubble Sort comparer avec n-1
        for(j=0;j<n-1-i;j++){
            if (nuage[j].a>nuage[j+1].a){
                x=nuage[j].a;y=nuage[j].b;
                nuage[j].a=nuage[j+1].a;nuage[j].b=nuage[j+1].b;
                nuage[j+1].a=x;nuage[j+1].b=y;
            }else if(nuage[j].a==nuage[j+1].a && nuage[j].b>nuage[j+1].b){
                x=nuage[j].a;y=nuage[j].b;
                nuage[j].a=nuage[j+1].a;nuage[j].b=nuage[j+1].b;
                nuage[j+1].a=x;nuage[j+1].b=y;
            }}}
    printf("-----------sort----------\n");
    for (i=0;i<n;i++)
    {printf(" %f %f \n",nuage.a,nuage.b);}
}

void nuage() //
{
int i,num;
char buf;
FILE *f;
f=fopen("data.txt","r");
fgets(&buf,256,f);
num=buf;
point nuage[num];

后面这里要怎么把文件的坐标读取进去呢??


sort(nuage,num); //最后再排序  
fclose(f);
}

int main(){
    nuage();
    return 0;
}
最佳答案
2019-10-14 22:52:13
  1. #include<stdio.h>
  2. #include<stdlib.h>

  3. typedef struct   //这里有修改
  4. {
  5.         float a;
  6.         float b;
  7. }point;

  8. void sort(point nuage[],int n)  //坐标排序的函数
  9. {
  10.         int i,j;
  11.         float x,y;
  12.         for(i=0;i<n-1;i++){   // Bubble Sort comparer avec n-1
  13.                 for(j=0;j<n-1-i;j++){
  14.                         if (nuage[j].a>nuage[j+1].a){
  15.                                 x=nuage[j].a;y=nuage[j].b;
  16.                                 nuage[j].a=nuage[j+1].a;nuage[j].b=nuage[j+1].b;
  17.                                 nuage[j+1].a=x;nuage[j+1].b=y;
  18.                         }else if(nuage[j].a==nuage[j+1].a && nuage[j].b>nuage[j+1].b){
  19.                                 x=nuage[j].a;y=nuage[j].b;
  20.                                 nuage[j].a=nuage[j+1].a;nuage[j].b=nuage[j+1].b;
  21.                                 nuage[j+1].a=x;nuage[j+1].b=y;
  22.                         }}}
  23.         printf("-----------sort----------\n");
  24.         for (i=0;i<n;i++)
  25.         {printf(" %f %f \n",nuage[i].a,nuage[i].b);}
  26. }

  27. void nuage() //从文件中读入数据的函数
  28. {
  29.         int i,num;
  30.         char buf[256];  //读入一行的缓冲区
  31.         FILE *f;
  32.         point *pnuage;  //malloc分配内存的地址
  33.         f=fopen("data.txt","r");
  34.         if(f==NULL) {
  35.                 printf("打开文件失败.\n");
  36.                 return;
  37.         }
  38.         fgets(buf,256,f);
  39.         if(sscanf(buf,"%d",&num)!=1){  //第一行 坐标数量
  40.                 printf("文件格式错误.\n");
  41.                 return;
  42.         }

  43.         //point nuage[num];  //如果是C99以后是可以这样定义的
  44.         pnuage=(point *)malloc(sizeof(point)*num);  //分配num个结构保存坐标

  45.         //读入num个坐标
  46.         for(i=0;i<num;i++){
  47.                 fgets(buf,256,f);
  48.                 if(sscanf(buf,"%f%f",&pnuage[i].a,&pnuage[i].b)!=2){
  49.                         printf("文件格式错误.\n");
  50.                         return;
  51.                 }
  52.         }

  53.         sort(pnuage,num); //最后再排序  
  54.         fclose(f);
  55.         free(pnuage);  //释放malloc分配的内存
  56. }

  57. int main(){
  58.         nuage();
  59.         return 0;
  60. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-10-14 22:52:13 | 显示全部楼层    本楼为最佳答案   
  1. #include<stdio.h>
  2. #include<stdlib.h>

  3. typedef struct   //这里有修改
  4. {
  5.         float a;
  6.         float b;
  7. }point;

  8. void sort(point nuage[],int n)  //坐标排序的函数
  9. {
  10.         int i,j;
  11.         float x,y;
  12.         for(i=0;i<n-1;i++){   // Bubble Sort comparer avec n-1
  13.                 for(j=0;j<n-1-i;j++){
  14.                         if (nuage[j].a>nuage[j+1].a){
  15.                                 x=nuage[j].a;y=nuage[j].b;
  16.                                 nuage[j].a=nuage[j+1].a;nuage[j].b=nuage[j+1].b;
  17.                                 nuage[j+1].a=x;nuage[j+1].b=y;
  18.                         }else if(nuage[j].a==nuage[j+1].a && nuage[j].b>nuage[j+1].b){
  19.                                 x=nuage[j].a;y=nuage[j].b;
  20.                                 nuage[j].a=nuage[j+1].a;nuage[j].b=nuage[j+1].b;
  21.                                 nuage[j+1].a=x;nuage[j+1].b=y;
  22.                         }}}
  23.         printf("-----------sort----------\n");
  24.         for (i=0;i<n;i++)
  25.         {printf(" %f %f \n",nuage[i].a,nuage[i].b);}
  26. }

  27. void nuage() //从文件中读入数据的函数
  28. {
  29.         int i,num;
  30.         char buf[256];  //读入一行的缓冲区
  31.         FILE *f;
  32.         point *pnuage;  //malloc分配内存的地址
  33.         f=fopen("data.txt","r");
  34.         if(f==NULL) {
  35.                 printf("打开文件失败.\n");
  36.                 return;
  37.         }
  38.         fgets(buf,256,f);
  39.         if(sscanf(buf,"%d",&num)!=1){  //第一行 坐标数量
  40.                 printf("文件格式错误.\n");
  41.                 return;
  42.         }

  43.         //point nuage[num];  //如果是C99以后是可以这样定义的
  44.         pnuage=(point *)malloc(sizeof(point)*num);  //分配num个结构保存坐标

  45.         //读入num个坐标
  46.         for(i=0;i<num;i++){
  47.                 fgets(buf,256,f);
  48.                 if(sscanf(buf,"%f%f",&pnuage[i].a,&pnuage[i].b)!=2){
  49.                         printf("文件格式错误.\n");
  50.                         return;
  51.                 }
  52.         }

  53.         sort(pnuage,num); //最后再排序  
  54.         fclose(f);
  55.         free(pnuage);  //释放malloc分配的内存
  56. }

  57. int main(){
  58.         nuage();
  59.         return 0;
  60. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-19 00:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表