C 读取装备文件,依照装备值从小到大的次序输入圆形、三角或方形ITeye - 凯发娱乐

C 读取装备文件,依照装备值从小到大的次序输入圆形、三角或方形ITeye

2019年03月01日15时37分03秒 | 作者: 鸿骞 | 标签: 装备,文件,读取 | 浏览: 921

讲堂教师留个作业,开发一段代码,从装备文件中读取用户装备的值,依照从小到大的次序排序,然后顺次输出圆形、方形或许三角形。

装备文件如下:
triangle=2
cycle=5
square=8

教师给的比如是C#的,由于对C#不是很熟悉,因而改造成了C版别和Java版别的,这儿是C版别的比如。

要完结本比如,需求将使命分解成以下过程:读取装备文件、排序用户装备数值、依照升序顺次输出图形。

1,读取装备文件:感觉C读取文件仍是很便利的,可是字符串操作相对较少,读取完每行依照“=”切割时比较费事。
 //load the configure file
 FILE *f;
 f = fopen(FILENAME,"r");
 if(f  NULL){
 printf("%s\n", "error when open the configure file");
 return ;
 char content[3][100];
 char line[100];
 int i=0;
 while(fgets(line, 100, f) != NULL){
 if(line[0]  #){
 continue;
 }else{
 strncpy(content[i], line, 100);
 i++;
 fclose(f);
 //parser the configured file
 for(i=0;i i++){
 parserByLine(content[i], kv, 6);


解析每行内容,依照“=”切割。
//parser configure file line by line
void parserByLine(char * line, struct shapeType * kv,int num){
 int length = 0, equalSign = 1;
 char *begin;
 length = strlen(line);
 for(begin = line; * begin != = equalSign = length; begin++){
 equalSign++;
 //seperate name and value by equal
 //这儿的数组需求声明的大一些,避免参数称号保存不全
 char charValue[200];
 char charName[200];
 strncpy(charName, line, equalSign-1);
 strncpy(charValue, line + equalSign, length);
 char * strCycle = CYCLE;
 char * strSquare = SQUARE;
 char * strTriangle = TRIANGLE;
 if(* strCycle  charName[0]){
 kv- sortValue = atoi(charValue);
 }else if(* strTriangle  charName[0]){
 // (* (kv+1)).sortValue = atoi(charValue);
 (++kv)- sortValue = atoi(charValue);
 }else if(* strSquare  charName[0]){
 // (* (kv+2)).sortValue = atoi(charValue);
 kv += 2;
 kv- sortValue = atoi(charValue);

由于装备内容在java中是运用key、value的方式保存的,可是C没有这种数据结构,因而自己界说了一个结构shapType,用来保存每行装备的键值对应联系。
struct shapeType
 char * shapeName;
 int sortValue;
} shapes[3] = {{CYCLE,0},{TRIANGLE,0},{SQUARE,0}};


接下来对读取出来的内容进行排序:
//sort configured values load from the configure file
void sort(struct shapeType * kv){
 int i, j;
 char * tmpName;
 int tmpValue;
 for(i=0;i i++){
 for(j=i+1;j j++){
 if( (* (kv+i)).sortValue = (* (kv+j)).sortValue){
 tmpName = (* (kv+j)).shapeName;
 tmpValue = (* (kv+j)).sortValue;
 (* (kv+j)).shapeName = (* (kv+i)).shapeName;
 (* (kv+j)).sortValue = (* (kv+i)).sortValue;
 (* (kv+i)).shapeName = tmpName;
 (* (kv+i)).sortValue = tmpValue;


接下来就是依照排序后的次序,进行输出了,这个比较简单:
// draw shapes accroding to the sorted array shapes[3]
void draw(struct shapeType * kv){
 struct shapeType * kvEnd;
 kvEnd = kv+3;
 for(;kv kvEnd;kv++){
 if( kv- shapeName  CYCLE){// (* kv).shapeName
 drawCycle();
 }else if( kv- shapeName  SQUARE){
 drawSquare();
 }else if( kv- shapeName  TRIANGLE){
 drawTriangle();
 printf("\n");


总结:良久没有写C了,并且这个项目是先完结的Java版别,回头再写C版别的,感觉适当苦楚,总是在以Java的思想去想C的构思,成果就是什么言语也不像了。好在是根本的功用出来了,至于代码优化,欢迎我们给出好的主张啊!

附件是项目几个源码文件,能够直接下载运用,进口是"main.c"
版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表凯发娱乐立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章