📄 read_data.c
字号:
#include "genet.h"/*#include <strings.h>*/int read_data()/* Version 4 modified 15 Jan 89 GAV to read in self-describing data. Returns EOF if it strikes an EOF, 0 if a blank line and some other value if an error*/{ int i = -1; int j = -1; int sum_dest = 0; int sum_sour = 0; char line[100],fld1[50],fld2[50]; int sn; /* result of scanf */ int errs = EOF; /* return result */ int run; while ( gets(line) != NULL ) { if (strcmp(line,"")==0) { /* printf("null line\n");*/ errs = 0; break; } puts(line); sscanf(line,"%s %s",fld1,fld2); /* printf("|%10s|%10s|\n",fld1,fld2); */ if (strncmp(fld1,"#",1)==0){ } else if (strcmp(fld1,"")==0){ errs = 0; break; } /* line of spaces or tabs only */ else if (strncmp(fld1,"title",5)==0){ } else if (strncmp(fld1,"pop",3)==0){ sscanf(fld2,"%d",&pop); if (pop==0) return(1); if (pop > 50) { printf(" pop must be <=50\n"); return(1); } } else if ( strncmp(fld1,"sprob",5)==0){ sscanf(fld2,"%lf",&sprob); if ( sprob <= 0 ) { printf("sprob must be > 0\n"); errs=1; break; } } else if ( strncmp(fld1,"seed",4)==0 ){ sscanf(fld2,"%d",&seed0); srand(seed0); } else if ( strncmp(fld1,"cross",5)==0 ){ sscanf(fld2,"%d",&cross); if (cross % 2) { printf(" cross must be even\n"); errs=1; break; } } else if (strncmp(fld1,"mutat",5)==0)sscanf(fld2,"%d", &mutat); else if (strncmp(fld1,"run",3)==0)sscanf(fld2,"%d", &run); else if ( strncmp(fld1,"inver",5)==0)sscanf(fld2,"%d", &inver); else if ( strncmp(fld1,"it",2)==0 ) sscanf(fld2,"%d",&it); else if ( strncmp(fld1,"nsource",7)==0 ){ sscanf(fld2,"%d",&k); if ( k > 10) { printf(" nsource must be <= 10\n"); errs=1; break; } } else if ( strncmp(fld1,"ndest",5)==0 ){ sscanf(fld2,"%d",&n); if ( n > 10) { printf(" ndest must be <= 10\n"); errs=1; break; } } else if ( strncmp(fld1,"sources",7)==0 ){ if ( k == 0 ) { printf("nsources is zero\n"); errs=1; break; } for (i=0 ;i < k; i++) { sn = scanf("%d", &sour[i]); printf("%5d ",sour[i]); } printf("\n"); gets(line); } else if ( strncmp(fld1,"dests",5)==0 ) { if ( n == 0 ) { printf("ndest is zero\n"); errs=1; break; } for ( j = 0; j < n; j++) { sn=scanf("%d", &dest[j]); printf("%5d ",dest[j]); } printf("\n"); gets(line); } else if ( strncmp(fld1,"costs",5)==0 ) { if ( k == 0 || n == 0) { printf("nsources or ndest is zero\n"); errs=1; break; } for ( i = 0; i < k; i++) { for ( j = 0; j < n; j++) { scanf("%d", &cost[i][j]); printf("%5d ",cost[i][j]); } printf("\n"); } gets(line); } else if ( strncmp(fld1,"optimum",7)==0){ sscanf(fld2,"%ld", &optimum);} else if ( strncmp(fld1,"end",3)==0){ errs = -1;break;} else { printf("I cannot understand this data\n"); errs=1; break; } } /* check sources and destination sums */ if (!errs) { for (i=0; i < n; ++i) sum_dest = sum_dest + dest[i]; for (i=0; i < k; ++i) sum_sour = sum_sour + sour[i]; if (sum_dest != sum_sour) { printf("Sums of sources and dests do not agree\n"); errs=2; } } return(errs);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -