*   >> Lese Utdanning Artikler >> education >> college and university

Modul 9: Introduksjon til C og C ++

Modul 9

---------------------------- --------------------- #include //for system () # include ... {C ++ koder ...} --------- ---------------------------------------- bør endres til: ----- -------------------------------------------- #include //bruk C ++ wrapper å kalle C-funksjoner fra C ++ programmer ... # include bruker namespace std; ... {C ++ koder ...} ---------------------------------------- --------- I VC ++ /VC ++ .Net den iostream.h (header med .h) ikke er gyldig lenger. Det bør være C ++ øverste del, slik at det i samsvar med standarden.

I eldre Borland C ++ kompilatoren dette fortsatt fungerer, men ikke riktig noe mer ... og for standard C /C ++ portabilitet bør ikke være noe problem eller bedre du leser Module23 på https://www.tenouk.com/Module23.html å få det store bildet ... For C-koder, har de fortsatt C koder: o) ================================= ======================================== ========== ================================================== ============= //Åpne og lukke filen eksempel #include #include //SUCCESS = 0, FAIL = 1 bruker opplisting enum {SUCCESS, FAIL}; int main (void) {FILE * fptr; //filnavnet er tkk1103.

txt og ligger //i samme mappe som programmet char filnavn [] = "tkk1103.txt"; //setter verdien Reval til 0 int Reval = suksess; //test åpning av fil for lesing, hvis mislykkes ... if ((fptr = fopen (filnavn, "r")) == NULL) {printf (, filnavn "Kan ikke åpne% s \\ n."); Reval = FAIL; //null Reval til en} //hvis vellykket do ... else {printf ("Åpne% s fil vellykket \\ n", filnavn); //programmet vil vise adressen der //filpekeren poeng til .. printf ("Verdien av fptr: 0x% p \\ n", fptr); printf ("\\ n .... fil behandling bør gjøres her .... \\ n"); printf ("\\ nReady å lukke% s \\ n.

", filnavn); //lukker filstrøm ... if (fclose (fptr) == 0) printf ("Lukke% s fil vellykket \\ n", filnavn); } //For Borland ... kan fjerne følgende pause og biblioteket, //stdlib.h for andre kompilatorer system ("pause"); returnere Reval; } ------------------------------ Testtwo.txt ---------------- ---------------------------------- ÅPNING, lesing, skriving og lukking FIL -------- ----------------------------------- Testing fil. Denne filen heter testtwo.txt. Etter åpning av filer for lesing og skriving, uten feil, vil innholdet i denne filen (testtwo.

txt) leses og utgang (skrive) til den andre filen heter testone.txt og standard utgang (skjerm /konsoll) tegn for tegn !!! --- HAPPY LÆRING FOLKS !!! ---- ------------------------------------- -------------------------------------------------- ----- //Lese og skrive ett tegn om gangen #include #include //nummerert datatype, SUCCESS = 0, FAIL = en enum {SUCCESS, FAIL}; //prototype funksjon for å lese fra og skrive ... void CharReadWrite (FILE * finnen, FILE * fut); int main () {//erklærer to file pekere ... FILE * fptr1, * fptr2; //definere to filene navn ... røye filnavn1 [] = "testone.

txt"; char filnavn2 [] = "testtwo.txt"; int Reval = suksess; //teste åpningen filnavn1 for å skrive .... //hvis mislykkes .... if ((fptr1 = fopen (filnavn1, "w")) == NULL) {printf ("Problem, kan ikke åpne% s. \\ n ", filnavn1); Reval = FAIL; } //Hvis du åpner filnavn1 for skriving er vellykket, //test for åpning for lesing filnavn2, hvis mislykkes ... else if ((fptr2 = fopen (filnavn2, "r")) == NULL) {printf ("Problem, kan ikke åpne% s \\ n ", filnavn2.); Reval = FAIL; } //Hvis vellykket åpning for å lese fra filnavn2 //og skriver til filnavn1 ...

else {//funksjon samtale for lesing og skriving ... CharReadWrite (fptr2, fptr1); //lukker begge filene ... if (fclose (fptr1) == 0) printf ("% s nær vellykket \\ n", filnavn1); if (fclose (fptr2) == 0) printf ("% s nær vellykket \\ n", filnavn2); } //For Borland hvis utarbeidet etter sin IDE ... system ("pause"); returnere Reval; } //Lese skrive funksjonsdefinisjon void CharReadWrite (FILE * finnen, FILE * fout) {int c; //hvis slutten av filen er nådd, do ... while ((c = fgetc (fin)) = EOF!) {//skrive til en fil ... fputc (c, fut); //visning på skjermen ...

putchar (c); } Printf ("\\ n"); } ------------------------------------ Testfour.txt ---------- --------------------------- ÅPNING, lese, skrive en linje med tegn -------------- -------------------------------------- Dette er filen testfour.txt. Denne filen innhold vil bli lest linje for linje med tegn til noe mer linje av karakter funnet. Deretter vil det bli sendt ut til skjermen, og vil også bli kopiert til fil testhree.txt. Sjekk innholdet av testhree.txt fil ...

--------------------------------------- ------------- ------------------HA EN FIN DAG--------------- ---- ---------------------------------------------- --------------------------------------- //Lese og skrive en linje om gangen # inkluderer #include enum {SUCCESS, FAIL, MAX_LEN = 100}; //funksjon prototype for lese- og skriver for linje ... void LineReadWrite (FILE * finnen, FILE * fut); int main (void) {FILE * fptr1, * fptr2; //fil testhree.txt ligger ved roten, c: //du kan sette denne filen på ethvert sted gitt //du gir full bane, samme for testfour.txt char filnavn1 [] = "c: \\\\ testhree.

tekst"; røye filnavn2 [] = "c: \\\\ testfour.txt"; char Reval = suksess; //test åpning testhree.txt fil for skriving, hvis mislykkes ... if ((fptr1 = fopen (filnavn1, "w")) == NULL) {printf ("Problem, kan ikke åpne% s for skriving. \\ n" , filnavn1); Reval = FAIL; } //Test åpning testfour.txt fil for lesing, hvis mislykkes ... else if ((fptr2 = fopen (filnavn2, "r")) == NULL) {printf ("Problem, kan ikke åpne% s for lesing. \\ n ", filnavn2); Reval = FAIL; } //Hvis du åpner fro skriving og lesing vellykket, do ... else {//funksjon samtale for lese og skrive, linje for linje ...

LineReadWrite (fptr2, fptr1); //lukker begge filene streame ... if (fclose (fptr1) == 0) printf ("% s vellykket lukket \\ n.", filnavn1); if (fclose (fptr2) == 0) printf ("% s vellykket lukket \\ n.", filnavn2); } //For Borland skjermbilde system ("pause"); returnere Reval; } //Funksjonsdefinisjon for linje lese, skrive ... void LineReadWrite (FILE * finnen, FILE * fout) {//lokal variabel ... røye buff [MAX_LEN]; while (! fgets (buff, MAX_LEN, fin) = NULL) {//skrive til fil ... fputs (buff, Fout); //skrive til skjerm ...

printf ("% s", buff); }} ----------------------------------------- Testsix.txt ---- ------------------------------------------ ÅPNING, lesing og skriver en blokk med DATA ----------------------------------------------- Dette er fil testsix.txt. Innholdet vil bli lest og utgang til skjermen /konsoll og kopieres til testfive.txt fil. Den lesing og skriving på grunnlag av datablokk. Kan være denne metoden er raskere enn å lese /skrive for tegn, for linje .....

----------------------------- ------------------ ------------------SLUTT------------- ------------- ------------------------------------- -------------------------------------------------- ----------- //Lese og skrive ett kvartal av gangen #include #include //erklære enum datatype, vil du dette //lærer i andre modul ... enum {SUKSESS, FAIL, MAX_LEN = 80}; //funksjon prototype for blokk lesing og skriving void BlockReadWrite (FILE * finnen, FILE * fut); //funksjon prototype for feilmeldinger ... int errormsg (char * str); int main (void) {FILE * fptr1, * fptr2; //definere filnavnene ...

//filene plasseringen er på c: \\ Temp char filnavn1 [] = "c: \\\\ Temp \\\\ testfive.txt"; røye filnavn2 [] = "c: \\\\ Temp \\\\ testsix.txt"; int Reval = suksess; //test åpning testfive.txt fil for skriving, hvis mislykkes ... if ((fptr1 = fopen (filnavn1, "w")) == NULL) {Reval = errormsg (filnavn1); } //Test åpning testsix.txt fil for lesing, hvis mislykkes ... else if ((fptr2 = fopen (filnavn2, "r")) == NULL) {Reval = errormsg (filnavn2); } //Hvis du åpner filer for skriving og lesing er vellykket, do ...

else {//samtalefunksjonen for lesing og skriving BlockReadWrite (fptr2, fptr1); //lukker begge filer bekker ... if (fclose (fptr1) == 0) printf ("% s vellykket lukket \\ n", filnavn1); if (fclose (fptr2) == 0) printf ("% s vellykket lukket \\ n", filnavn2); } Printf ("\\ n"); //for Borland ... system ("pause"); returnere Reval; } //Funksjonsdefinisjon for blokk lese, skrive void BlockReadWrite (FILE * finnen, FILE * fout) {int num; røye buff [MAX_LEN + 1]; //mens ikke ende av fil for inndatafilen, do ... mens {//leser ...

num = fread (buff, sizeof (char), MAX_LEN, fin) (feof (fin)!); //tilføye et nulltegn buff [num * sizeof (char)] = '\\ 0'; printf ("% s", buff); //skriver ... fwrite (buff, sizeof (char), num, fut); }} //Funksjonsdefinisjon for feilmelding int errormsg (char * str) {//vise feilmelding ... printf ("Problem, kan ikke åpne% s \\ n.", Str); returnere FAIL; } -----------------------------------------tesseven.txt------------------------------------------------------ DETTE ER første tekstlinje, tesseven.txt fil Dette er den andre tekstlinje, tesseven.txt fil Dette er den tredje tekstlinje, tesseven.

txt fil Dette er den fjerde linjen med tekst, tesseven.txt fil - -------------------------------------------------- -------------------------------------------- //Random tilgang til en fil #include #include enum {SUCCESS, FAIL, MAX_LEN = 120}; //funksjonsprototyper, søke filen stillingsindikatoren void PtrSeek (FILE * fptr); //funksjon prototype, forteller filen posisjonsindikator ... lang PtrTell (FILE * fptr); //funksjon prototype lese og skriver ... annullere DataRead (FILE * fptr); int errormsg (char * str); int main (void) {FILE * fptr; røye filnavn [] = "c: \\\\ Temp \\\\ tesseven.

txt"; int Reval = suksess; //hvis det er noen feil ved åpning av fil for lesing ... if ((fptr = fopen (filnavn, "r")) == NULL) {Reval = errormsg (filnavn); } //Hvis åpningen er vellykket ... else {//PtrSeek () funksjon samtale ... PtrSeek (fptr); //lukker filstrøm ... if (fclose (fptr) == 0) printf ("% s vellykket lukket \\ n.", filnavn); } //For Borland ...

system ("pause"); returnere Reval; } //PtrSeek () -funksjonen definisjon void PtrSeek (FILE * fptr) {lang offset1, offset2, offset3, offset4; offset1 = PtrTell (fptr); DataRead (fptr); offset2 = PtrTell (fptr); DataRead (fptr); offset3 = PtrTell (fptr); DataRead (fptr); offset4 = PtrTell (fptr); DataRead (fptr); printf ("\\ nReread den tesseven.txt, i tilfeldig rekkefølge: \\ n"); //lese den andre linjen i tesseven.txt fseek (fptr, offset2, SEEK_SET); DataRead (fptr); //lese den første linjen i tesseven.txt fseek (fptr, offset1, SEEK_SET); DataRead (fptr); //lese den fjerde linjen i tesseven.

txt fseek (fptr, offset4, SEEK_SET); DataRead (fptr); //lese den tredje linjen i tesseven.txt fseek (fptr, offset3, SEEK_SET); DataRead (fptr); } //PtrTell () -funksjonen definisjon lang PtrTell (FILE * fptr) {lang Reval; //fortelle fptr stilling ... Reval = ftell (fptr); printf ("The fptr er på% ld \\ n", Reval); returnere Reval; } //DataRead () -funksjonen definisjon void DataRead (FILE * fptr) {char buff [MAX_LEN]; //leser tekstlinje på fptr posisjon ... fgets (buff, MAX_LEN, fptr); //og vise teksten ...

printf ("->% s \\ n", buff); } //Feilmelding funksjonsdefinisjon int errormsg (char * str) {//vise denne feilmeldingen ... printf ("Problem, kan ikke åpne% s \\ n.", Str); returnere FAIL; } ------------------------------------------------- ------------------------------------------- //lesing, skriving, rewind og binære data #include #include enum {SUCCESS, FAIL, MAX_NUM = 5}; //funksjoner prototype ... void DataWrite (FILE * fut); ugyldig DataRead (FILE * fin); int errormsg (char * str); int main (void) {FILE * fptr; //binære type filer ... røye filnavn [] = "c: \\\\ Temp \\\\ teseight.

bin"; int Reval = suksess; //test for å opprette, åpne binær fil for skriving ... if ((fptr = fopen (filnavn, "wb +")) == NULL) {Reval = errormsg (filnavn); } Else {//Skrive inn data i filen teseight.bin DataWrite (fptr); //null filen stillingsindikatoren ... bakover (fptr); //lese data ... DataRead (fptr); //lukker filstrøm ...

if (fclose (fptr) == 0) printf ("% s vellykket lukket \\ n", filnavn); } //For Borland system ("pause"); returnere Reval; } //DataWrite () -funksjonen definisjon void DataWrite (FILE * fout) {int i; dobbel buff [MAX_NUM] = {145,23, 589,69, 122,12, 253,21, 987,234}; printf ("Størrelsen på buff:% d byte \\ n", sizeof (buff)); for (i = 0; i {printf ("% 5.

2f \\ n", buff [i]); fwrite (og buff [i], sizeof (dobbel), 1, fut);}} //DataRead () -funksjonen definisjon ugyldig DataRead (FILE * fin) {int i; doble x; printf ("\\ nReread fra den binære filen: \\ n"); for (i = 0; i {fread (& x, sizeof (dobbel), (size_t) 1 , fin); printf ("% 5.2f \\ n", x);}} //errormsg () -funksjonen definisjon int errormsg (char * str) {printf ("Kan ikke åpne% s \\ n.", str); retur FAIL;} --------------------------------------- testcal.

txt ----- ---------------------------------- 23 12 33 10 4 6 44 31 7 50 ------ -------------------------------------------------- --------------------------------- /* C Program for å beregne gjennomsnittet av en liste med tall. * //* beregne samlet fra én fil, utgang gjennomsnittlig * //* inn i en annen fil * /# include /* for exit () * /#include int main (void) {int verdi, total = 0, teller = 0; /* fileptrIn og fileptrOut er variabler av type (FILE *) * /FILE * fileptrIn, * fileptrOut; char filenameIn [100], filenameOut [100]; printf ("Vennligst oppgi en inngang filnavn (bruk banen hvis nødvendig): \\ n" ); scanf ("% s", filenameIn); printf ("Vennligst oppgi en utgang filnavn (bruk banen hvis nødvendig): \\ n"); scanf ("% s", filenameOut); /* åpne filer for lesing, "r" og skriving, "w" * /if ((fileptrIn = fopen (filenameIn, "r")) == NULL) {printf ("Feil ved åpning av% s for lesing.

\\ n" , filenameIn); exit

(1); } Else printf ("Åpne% s for lesing er OK \\ n.", FilenameIn); if ((fileptrOut = fopen (filenameOut, "w")) == NULL) {printf ("Feil ved åpning av% s for skriving \\ n.", filenameOut); exit

(1); } Else printf ("Åpne% s for skriving er OK \\ n.", FilenameOut); /* fscanf * /printf ("\\ nCalculate den totale ... \\ n"); while (EOF = fscanf (fileptrIn, "% i", og verdi)!) {total + = verdi; ++ telle; } /* slutten av mens loop * //* Skriv gjennomsnittsverdien til fil * //* fprintf * /printf ("Beregn gjennomsnittlig ... \\ n \\ n.

"); fprintf (fileptrOut, "Gjennomsnitt av% i tall =% f \\ n", telle, total /(dobbel) teller); printf ("Gjennomsnittet av% i tall =% f \\ n \\ n", telle, total /(dobbel) teller); printf ("Sjekk også din% s filinnholdet \\ n", filenameOut); if (fclose (fileptrIn) == 0) printf ("% s lukket vellykket \\ n", filenameIn); if (fclose (fileptrOut) == 0) printf ("% s lukket vellykket \\ n", filenameOut); returnere 0; } ------------------------------------------------- -------------------------------------------- //Viderekoble en standard strøm #include #include enum {SUCCESS, FAIL, STR_NUM = 6}; void StrPrint (char ** str); int errormsg (char * str); int main (void) {//erklærer og definere en peker til strengen .

.. char * str [STR_NUM] = {"Viderekoble en standard strøm til tekstfilen.", "Disse 5 linjer med tekst vil bli omdirigert", " så mange ting du kan gjøre hvis du forstår "," -konseptet, grunntanken - prøv dette "," -------------- FERDIG ---------- ---------------- "}; røye filnavn [] = "c: \\\\ Temp \\\\ testnine.txt"; int Reval = suksess; StrPrint (str); //oppretter filen hvis ikke eksisterer, og åpen for å skrive ... //hvis eksisterer, forkaste den tidligere innhold ... if (freopen (filnavn, "w", stdout) == NULL) {Reval = errormsg (filnavn); } Else {//kaller StrPrint () -funksjonen ...

StrPrint (str); //lukker standard utgang ... fclose (stdout); } Returnere Reval; } //StrPrint () -funksjonen definisjon void StrPrint (char ** str) {int i; for (i = 0; jeg //til standard ut-skjerm /konsoll ... printf ("% s \\ n", str [i]); system ("pause");} //errormsg () -funksjonen definisjon int errormsg (char * str) {printf ("Problem, kan ikke åpne% s \\ n.", str); returnere FAIL;} ---------------------- -------------------------------------------------- -------------- //Demonstrer remove () -funksjonen #include #include void main () {//erklære en matrise for å lagre filnavnet ...

røye filnavn [80]; printf ("Skriv inn filnavnet som skal slettes:"); gets (filnavn); //sjekke eventuelle feil ... if (fjern (filnavn) == 0) printf (". Fil% s har blitt slettet \\ n", filnavn ), ellers fprintf (stderr, "Feil ved sletting av filen% s \\ n.", filnavn); system ("pause");} --------------------- -------------------------------------------------- ---------------- //Bruke endre navn () for å endre et filnavn #include #include void main () {char oldname [80], newname [80]; printf ("Skriv gjeldende filnavn: "); gets (oldname); printf (" Skriv nytt navn for filen: "); gets (newname); if (endre navn (oldname, newname) == 0) {printf ("% s har vært endre navn% s \\ n ", oldname, newname.

); } Else {fprintf (standardfeil ". En feil har oppstått døpe% s \\ n", oldname); } System ("pause"); } ------------------------------------------------- ------------------------------------------- //Kopiere en fil # Include #include int file_copy (char * oldname, char * newname); void main () {char kilde [80], destinasjon [80]; //få kilden og målet navnene printf den ("\\ nAngi kildefilen:"); gets (kilde); printf ("\\ nAngi målfil:"); gets (destinasjon); if (file_copy (kilde, destinasjon) == 0) puts ("Kopier operasjon vellykket"); annet fprintf (stderr, "Feil under kopieringen"); system ("pause"); } Int file_copy (char * oldname, char * newname) {FILE * fold, * fnew; int c; //Åpne kildefilen for lesing i binær modus if ((fold = fopen (oldname, "rb")) == NULL) retur 1; //Åpne målfilen for å skrive i binær modus hvis ((fnew = fopen (newname, "wb")) == NULL) {fclose (fold); returnere -1; } //Les én byte om gangen fra kilden, hvis slutten av filen //ikke er nådd, skriver byte til målet while

(1) {c = fgetc (fold); if (! feof (fold)) fputc (c, fnew); annet break; } Fclose (fnew); fclose (fold); returnere 0; } ------------------------------- Testfour.

txt --------------- --------------------- ------------------! -------- LINUX LOR ---------------- ------------ FEDORA 3, gcc xxx ----------------- --- ÅPNING, lese, skrive en linje med tegn -------------------------------------- -------------- Dette er filen testfour.txt. Denne filen innhold vil bli lest linje for linje med tegn til noe mer linje av karakter funnet. Deretter vil det bli sendt ut til skjermen, og vil også bli kopiert til fil testhree.txt. Sjekk innholdet av testhree.txt fil ...

--------------------------------------- ------------- ------------------HA EN FIN DAG--------------- ---- ---------------------------------------------- --------------------------------- /*************** readline .c ************ /* Lese og skrive en linje om gangen * /#include #include enum {SUCCESS, FAIL, MAX_LEN = 100}; /* funksjon prototype for lese- og skriver for linje ... * /void LineReadWrite (FILE * finnen, FILE * fut); int main (void) {FILE * fptr1, * fptr2; /* fil testhree.txt ligger i gjeldende katalog.

du kan sette denne filen på ethvert sted forutsatt at du gir full bane, samme for testfour.txt * /røye filnavn1 [] = "testhree.txt"; char filnavn2 [] = "testfour.txt"; char Reval = suksess; /* test åpning testhree.txt fil for skriving, hvis mislykkes ... * /if ((fptr1 = fopen (filnavn1, "w")) == NULL) {printf ("Problem, kan ikke åpne% s for skriving. \\ n ", filnavn1); Reval = FAIL; } /* Test åpning testfour.txt fil for lesing, hvis mislykkes ... * /else if ((fptr2 = fopen (filnavn2, "r")) == NULL) {printf ("Problem, kan ikke åpne% s for lesing .

\\ n ", filnavn2); Reval = FAIL; } /* Hvis du åpner fro skriving og lesing vellykket, do ... * /else {/* funksjon samtale for lese og skrive, linje for linje ... * /LineReadWrite (fptr2, fptr1); /* lukker begge filene streame ... * /if (fclose (fptr1) == 0) printf ("% s vellykket lukket \\ n.", filnavn1); if (fclose (fptr2) == 0) printf ("% s vellykket lukket \\ n.", filnavn2); } Returnere Reval; } /* Funksjonsdefinisjon for linje lese-, skrive- * /void LineReadWrite (FILE * finnen, FILE * fout) {/* lokal variabel ... * /røye buff [MAX_LEN].

; while (! fgets (buff, MAX_LEN, fin) = NULL) {/* skriv til fil ... * /fputs (buff, fut); /* skrive til skjerm ... * /printf ("% s", buff); }} ------------------------------------------------ ---------------------------------------------- ////////////rwbinary.c////////////////FEDORA 3, gcc xxx ///////lesing, skriving, spole og binære data #include enum {SUKSESS, FAIL, MAX_NUM = 5}; //funksjoner prototype ... void DataWrite (FILE * fut); ugyldig DataRead (FILE * fin); int errormsg (char * str); int main (void) {FILE * fptr; //binære type filer ... røye filnavn [] = "/testo1/testo2/teseight.

bin"; int Reval = suksess; //test for å opprette, åpne binær fil for skriving ... if ((fptr = fopen (filnavn, "wb +")) == NULL) {Reval = errormsg (filnavn); } Else {//Skrive inn data i filen teseight.bin DataWrite (fptr); //null filen stillingsindikatoren ... bakover (fptr); //lese data ... DataRead (fptr); //lukker filstrøm ...

if (fclose (fptr) == 0) printf ("% s vellykket lukket \\ n", filnavn); } Returnere Reval; } //DataWrite () -funksjonen definisjon void DataWrite (FILE * fout) {int i; dobbel buff [MAX_NUM] = {145,23, 589,69, 122,12, 253,21, 987,234}; printf ("Størrelsen på buff:% d byte \\ n", sizeof (buff)); for (i = 0; i {printf ("% 5.

2f \\ n", buff [i]); fwrite (og buff [i], sizeof (dobbel), 1, fut);}} //DataRead () -funksjonen definisjon ugyldig DataRead (FILE * fin) {int i; doble x; printf ("\\ nReread fra den binære filen: \\ n"); for (i = 0; i {fread (& x, sizeof (dobbel), (size_t) 1 , fin); printf ("% 5.2f \\ n", x);}} //errormsg () -funksjonen definisjon int errormsg (char * str) {printf ("Kan ikke åpne% s \\ n.", str); retur FAIL;} ====================================================================================================;>;>.h>.h>.h>.h>.h>.h>.h>.h>.h>;>.h>.h>.h>.h>;>;>.h>.h>.h>.h>.h>.h>.h>.h>.h>.h>.h>.h>.

h>.h>

Page   <<       [1] [2] [3] [4] [5] [6] [7] [8] [9] >>
Copyright © 2008 - 2016 Lese Utdanning Artikler,https://utdanning.nmjjxx.com All rights reserved.