Hi, i am a beginner in C, and need a hand
Could anyone help me with the following task:
I have a data file (xml) and need to write a program in C:
1. make a list of all <Tuubid>(types) showing the number of <Jalgrattas> (bicycles) in each type, and
2. make a list of <Jalgrattas>(bicycles) showing <Mudel> (models) sorted by <Hind> (price)
3. The results should be inserted into an output file
here is the xml file
Code:
<?xml version="1.0" encoding="utf-8"?>
<xml>
<Author>helfer
<Jalgrattade Kataloog>Classic
<Tuubid> Maastikurattad
<Kategooria>Ekspert
<Jalgratas>
<Mudel>TEAM XRT</Mudel>
<Käike> 27 </Käike>
<Esivahetaja>SHIMANO XRT, 3 käiku</Esivahetaja>
<Tagavahetaja>SHIMANO XRT, 9 käiku</Tagavahetaja>
<Hind>67000.-</Hind>
</Jalgratas>
<Jalgratas>
<Mudel>TEAM XT</Mudel>
<Käike> 27 </Käike>
<Esivahetaja>SHIMANO LX, 3 käiku</Esivahetaja>
<Tagavahetaja>SHIMANO XT, 9 käiku</Tagavahetaja>
<Hind>17900.-</Hind>
</Jalgratas>
</Kategooria>
<Kategooria>Sport
<Jalgratas>
<Mudel>STORM</Mudel>
<Käike> 27 </Käike>
<Esivahetaja>SHIMANO LX, 3 käiku</Esivahetaja>
<Tagavahetaja>SHIMANO LX, 9 käiku</Tagavahetaja>
<Hind>7990.-</Hind>
</Jalgratas>
<Jalgratas>
<Mudel>STINGER</Mudel>
<Käike> 21 </Käike>
<Esivahetaja>SHIMANO C-50, 3 käiku</Esivahetaja>
<Tagavahetaja>SHIMANO Acera, 7 käiku</Tagavahetaja>
<Hind>4470.-</Hind>
</Jalgratas>
<Jalgratas>
<Mudel>ALU 24</Mudel>
<Käike> 24 </Käike>
<Esivahetaja>SHIMANO C-050, 3 käiku</Esivahetaja>
<Tagavahetaja>SHIMANO Alivio, 8 käiku</Tagavahetaja>
<Hind>6290.-</Hind>
</Jalgratas>
<Jalgratas>
<Mudel>LEGEND</Mudel>
<Käike> 21 </Käike>
<Esivahetaja>SHIMANO C-050, 3 käiku</Esivahetaja>
<Tagavahetaja>SHIMANO Altus, 7 käiku</Tagavahetaja>
<Hind>4990.-</Hind>
</Jalgratas>
<Jalgratas>
<Mudel>MYSTIC sx</Mudel>
<Käike> 24 </Käike>
<Esivahetaja>SHIMANO Acera, 4 käiku</Esivahetaja>
<Tagavahetaja>SHIMANO Acera, 6 käiku</Tagavahetaja>
<Hind>5500.-</Hind>
</Jalgratas>
</Kategooria>
<Kategooria>Harrastaja
<Jalgratas>
<Mudel>TATTOO</Mudel>
<Käike> 18 </Käike>
<Esivahetaja>SHIMANO Index System, 3 käiku</Esivahetaja>
<Tagavahetaja>SHIMANO Index System, 6 käiku</Tagavahetaja>
<Hind>2990.-</Hind>
</Jalgratas>
<Jalgratas>
<Mudel>ROCK</Mudel>
<Käike> 15 </Käike>
<Esivahetaja>SHIMANO TY-15, 3 käiku</Esivahetaja>
<Tagavahetaja>SHIMANO TY-15, 5 käiku</Tagavahetaja>
<Hind>2490.-</Hind>
</Jalgratas>
<Jalgratas>
<Mudel>POLAR</Mudel>
<Käike> 5 </Käike>
<Esivahetaja>-</Esivahetaja>
<Tagavahetaja>SHIMANO Index System, 5 käiku</Tagavahetaja>
<Hind>2290.-</Hind>
</Jalgratas>
<Jalgratas>
<Mudel>F1</Mudel>
<Käike> 21 </Käike>
<Esivahetaja>SHIMANO TY-22, 3 käiku</Esivahetaja
><Tagavahetaja>SHIMANO TY-22, 7 käiku</Tagavahetaja>
<Hind>3790.-</Hind>
</Jalgratas>
<Jalgratas>
<Mudel>IMPULSE sx</Mudel>
<Käike> 21 </Käike>
<Esivahetaja>SHIMANO TY-32, 3 käiku</Esivahetaja>
<Tagavahetaja>SHIMANO C-50,7 käiku</Tagavahetaja>
<Hind>3800.-</Hind>
</Jalgratas>
<Jalgratas>
<Mudel>GEMINI tandem</Mudel>
<Käike> 21 </Käike>
<Esivahetaja>SHIMANO TY-32, 3 käiku</Esivahetaja>
<Tagavahetaja>SHIMANO Altus, 7 käiku</Tagavahetaja>
<Hind>7700.-</Hind>
</Jalgratas>
</Kategooria>
</Tuubid>
<Tuubid> Linnarattad
<Kategooria> Naiste rattad
<Jalgratas>
<Mudel>AVENUE 7</Mudel>
<Käike> 7 </Käike>
<Esivahetaja>SHIMANO Nexus-7, pöördvaheti</Esivahetaja>
<Tagavahetaja>SHIMANO Nexus-7, rummusisene 7 käiku</Tagavahetaja>
<Hind>4490.-</Hind>
</Jalgratas>
<Jalgratas>
<Mudel>COMFORT</Mudel>
<Käike> 5 </Käike>
<Esivahetaja>Pöördvaheti</Esivahetaja>
<Tagavahetaja>SHIMANO Index System, 5 käiku</Tagavahetaja>
<Hind>2990.-</Hind>
</Jalgratas>
<Jalgratas>
<Mudel>DELUXE</Mudel>
<Käike> 5 </Käike>
<Esivahetaja>Pöördvaheti</Esivahetaja>
<Tagavahetaja>SHIMANO Index System, 5 käiku</Tagavahetaja>
<Hind>3290.-</Hind>
</Jalgratas>
<Jalgratas>
<Mudel>CRUISER</Mudel>
<Käike> 1 </Käike>
<Esivahetaja>-</Esivahetaja>
<Tagavahetaja>-</Tagavahetaja>
<Hind>1890.-</Hind>
</Jalgratas>
</Kategooria>
<Kategooria> Lasterattad
<Jalgratas>
<Mudel>Triple X</Mudel>
<Käike> 21 </Käike>
<Esivahetaja>SHIMANO TY-22, 3 käiku</Esivahetaja>
<Tagavahetaja>SHIMANO TY-22, 7 käiku</Tagavahetaja>
<Hind>3190.-</Hind>
</Jalgratas>
<Jalgratas>
<Mudel>DONNA</Mudel>
<Käike> 5 </Käike>
<Esivahetaja>pöördvaheti</Esivahetaja>
<Tagavahetaja>SHIMANO Index System, 5 käiku</Tagavahetaja>
<Hind>2890.-</Hind>
</Jalgratas>
<Jalgratas>
<Mudel>STAR</Mudel>
<Käike> 18 </Käike>
<Esivahetaja>SHIMANO Index System, 3 käiku</Esivahetaja>
<Tagavahetaja>SHIMANO Index System, 6 käiku</Tagavahetaja>
<Hind>2990.-</Hind>
</Jalgratas>
<Jalgratas>
<Mudel>ZERO</Mudel>
<Käike> 21 </Käike>
<Esivahetaja>SHIMANO TY-22, 3 käiku</Esivahetaja>
<Tagavahetaja>SHIMANO TY-22, 7 käiku</Tagavahetaja>
<Hind>2790.-</Hind>
</Jalgratas>
</Kategooria>
</Tuubid>
</Jalgrattade Kataloog>
</Author>
</xml>
and here is my version with mistakes(probably it`s completely wrong) and not completed - how to print results correctly?
Code:
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
#define N 21;
#define M 2;
struct Tuubid//types
{
char name[20]; //name of type
int kolvoratas; //number of bicycles
};
struct Jalgrattas//bicycles
{
char mudel[20];//name of model
int hind; //price
};
int main()
{
char rida[200], *s, *p;
int i,j;
char type[M], spisok[N];
FILE *fp; //data file
FILE *frz; //file for results
frz = fopen("result.txt", "w");
if ((fp = fopen ("Ratas.xml", "r")) = NULL)
printf ("Error!");
getch(); return 1;
while (!feof(fp)){ //check end of file indicator
fgets(rida,sizeof(rida), fp);//reading symbols from fp
for(s=rida; (p=strtok(s, "<>"))!=NULL; s=NULL)
{
for(i=0; i<M; i++)
{ //tuup - type
if(strcmp(p,"Tuup")==0) //A zero value indicates that both strings are equal
{
p=strtok(NULL, "<>");
//a null pointer specifies, in which case the function
//continues scanning where a successful call to the function ended.
strcpy(type[i].name, p);
}
else if(strcmp(p, "Jalgrattas")==0)//jalgrattas - bicycles
{
p=strtok(NULL, "<>");
type[i].kolvoratas=atoi(p); //change string to int
strcpy (type[i].kolvoratas,p);
}
else (strcmp(p, "/Tuup")==0)
}
for(j=0; j<N; j++)
{
if((strcmp(p,"Mudel"))==0) //mudel = model
{
p=strtok(NULL, "<>");
strcpy(spisok[j].mudel, p);//copy content of p into array
}
else(strcmp(p, "/Mudel")==0)
if(strcmp(p, "Hind"))==0 //hind - price
{
p=strtok(NULL, "<>");
spisok[j].hind=atof(p);
strcpy(spisok[j].hind, p);
}
else (strcmp(p, "/Hind"))==0
}
void sort();
}
}
fclose(fp);
fclose(frz);
printf("Press any key...");
getch();
}
void sort() //models sorted by price
{
char spisok[N];
for (int j=0; j<N; j++)
{
int min = spisok[j].hind;
int index = j;
for (int k=j+1; k<N; k++)
{
if (spisok[k].hind<min)
{
min = spisok[j].hind;
index = k;
}
Jalgrattas temp = spisok[index];
spisok[index]=spisok[j];
spisok[j]=temp;
}
}
}
thanks to all for help