2 00:00:00,000 --> 00:00:02,470 >> HÖGTALARE 1: Låt oss skriva ett program som uppmanar användaren att namnen och 3 00:00:02,470 --> 00:00:03,990 hus av tre studenter. 4 00:00:03,990 --> 00:00:07,300 Men snarare än att bara skriva ut sina namn och hus till skärmen, låt oss 5 00:00:07,300 --> 00:00:09,660 istället spara den informationen till disk. 6 00:00:09,660 --> 00:00:14,530 Med andra ord, låt oss skapa, säg, en CSV fil, för kommaseparerade värden, 7 00:00:14,530 --> 00:00:17,720 som egentligen bara en textfil som program som Excel eller Numbers 8 00:00:17,720 --> 00:00:21,690 kan öppna, och effektivt spara dem namn och hus permanent, så att 9 00:00:21,690 --> 00:00:23,220 vi kan granska dem senare. 10 00:00:23,220 --> 00:00:25,960 >> För att göra detta, låt oss först ta en titt på någon standardtext kod som jag har 11 00:00:25,960 --> 00:00:27,650 började med redan. 12 00:00:27,650 --> 00:00:32,380 Observera först att bland rubrikerna upp topp är nu standard lib.h som 13 00:00:32,380 --> 00:00:36,710 råkar ha vissa funktioner som är kopplade till fil I / O, infil och utgång. 14 00:00:36,710 --> 00:00:39,560 Lägg märke till att jag också har deklarerat en konstant som kallas STUDENTER - 15 00:00:39,560 --> 00:00:42,380 med stora bokstäver - vars värde är hårdkodad som tre. 16 00:00:42,380 --> 00:00:45,820 Observera nu att insidan av min huvudsakliga program, jag förklarar en rad 17 00:00:45,820 --> 00:00:50,270 storlek tre använder den konstant som kallas Studenter varje av vars medlemmar är av 18 00:00:50,270 --> 00:00:51,650 skriver eleverna. 19 00:00:51,650 --> 00:00:56,150 >> Minns nu att en elev ska vi definiera som att ha ett namn och ett hus som båda 20 00:00:56,150 --> 00:01:00,410 som är strängar som per detta deklaration instruerar, punkt h.. 21 00:01:00,410 --> 00:01:04,680 Nu tillbaka i structs1.c, märker att jag har en for-loop här som kommer att 22 00:01:04,680 --> 00:01:06,750 iterera från noll upp till tre. 23 00:01:06,750 --> 00:01:10,020 Det kommer att be mig om en elevs namn och en students hus 24 00:01:10,020 --> 00:01:12,310 igen och igen och igen. 25 00:01:12,310 --> 00:01:15,620 >> Sen längst ner i det här programmet, märker att jag har en annan för loop 26 00:01:15,620 --> 00:01:19,970 det kommer att frigöra den i: te studentens namn och den i: te studentens hus i en 27 00:01:19,970 --> 00:01:21,570 på liknande sätt konstruerade slingan. 28 00:01:21,570 --> 00:01:24,480 För att vara säker, kan vi kombinera dessa slingor till bara en, men jag ville 29 00:01:24,480 --> 00:01:28,180 har några tydliga segment av kod av hänsyn till diskussionen här. 30 00:01:28,180 --> 00:01:31,920 >> Nu i mellan dem för loopar, låt oss faktiskt har en annan, och den här är 31 00:01:31,920 --> 00:01:35,210 syfte i livet är att faktiskt spara alla av dessa namn och hus som är 32 00:01:35,210 --> 00:01:39,810 närvarande i RAM till disk i form av kommaseparerade värden. 33 00:01:39,810 --> 00:01:42,080 För att göra detta, kommer vi att använda tre nya funktioner - 34 00:01:42,080 --> 00:01:47,450 F öppet, F printf, och F nära, vilket öppna en fil, skriva ut till en fil, och 35 00:01:47,450 --> 00:01:48,440 stänga en fil. 36 00:01:48,440 --> 00:01:49,690 Vi kan använda dem på följande sätt. 37 00:01:49,690 --> 00:01:52,110 38 00:01:52,110 --> 00:01:58,240 >> FIL, med stora bokstäver, som är något av en nyfikenhet i C, blir FIL fopen 39 00:01:58,240 --> 00:02:03,020 quote unquote och nu ett namn på fil, säg, students.CSV, men jag kunde 40 00:02:03,020 --> 00:02:08,150 kalla det de flesta någonting, kommatecken och nu är jag kommer att ange en enstaka w insidan 41 00:02:08,150 --> 00:02:09,390 av dubbla citattecken. 42 00:02:09,390 --> 00:02:13,290 W, som ni kanske har gissat redan, innebär att fopen ska öppna filen 43 00:02:13,290 --> 00:02:17,360 heter Students.CSV för att skriva så att vi faktiskt kan spara lite 44 00:02:17,360 --> 00:02:19,370 innehåll till det. 45 00:02:19,370 --> 00:02:23,080 >> Låt oss nästa kontroll om fil inte är lika med noll. 46 00:02:23,080 --> 00:02:25,860 För om det är, har något troligen gått fel i vilket fall vi 47 00:02:25,860 --> 00:02:28,340 bör inte fortsätta att försöka att skriva ut något till den. 48 00:02:28,340 --> 00:02:33,400 Men om det inte är noll, då insidan av krullparenteser jag ska iterera 49 00:02:33,400 --> 00:02:38,030 från i är lika med 0 på upp till STUDENTER, och jag ska 50 00:02:38,030 --> 00:02:40,180 öka i varje iteration. 51 00:02:40,180 --> 00:02:45,750 Och inne i denna slinga, kommer jag att fprintf för att skriva ut till en fil - 52 00:02:45,750 --> 00:02:47,940 särskilt den som Jag har redan öppnat - 53 00:02:47,940 --> 00:02:54,650 en sträng som ser ut så här% s,% s omvänt snedstreck n nära citat. 54 00:02:54,650 --> 00:02:58,790 >> Och nu vill jag koppla in till var och en av dessa platshållare ärvärden 55 00:02:58,790 --> 00:03:03,390 av en elevs namn och ett hus med hjälp av punktoperatorn. 56 00:03:03,390 --> 00:03:10,030 Studerande bygel i.name, studerande bygel i.house close föräldra 57 00:03:10,030 --> 00:03:11,230 semikolon. 58 00:03:11,230 --> 00:03:16,180 Nu under detta för slinga, jag är helt enkelt kommer att kalla fclose av filen för 59 00:03:16,180 --> 00:03:18,520 för att slutligen avsluta ärendet. 60 00:03:18,520 --> 00:03:21,360 >> Nu när jag kör det här programmet, jag borde inte faktiskt se något på 61 00:03:21,360 --> 00:03:25,010 skärmen, men jag borde ha efter att ha kört det här programmet en fil som heter 62 00:03:25,010 --> 00:03:29,130 Students.CSV i samma katalog som Jag kör kommandot i att om 63 00:03:29,130 --> 00:03:32,480 innehålla en kommaseparerad lista med värden. 64 00:03:32,480 --> 00:03:34,790 Låt oss ta en titt. 65 00:03:34,790 --> 00:03:41,690 >> Gör structs 1. / Structs1 studentens namn, låt oss säga David, 66 00:03:41,690 --> 00:03:43,140 han kommer att leva i Mather. 67 00:03:43,140 --> 00:03:46,890 Studentens namn, låt oss säga, Lauren, hon ska leva i Leverett. 68 00:03:46,890 --> 00:03:50,800 Studentens namn, låt oss säga, Rob, han bor i Kirkland. 69 00:03:50,800 --> 00:03:54,050 Nu, igen, som förväntat, visas ingenting att ha hänt, men låt mig 70 00:03:54,050 --> 00:03:58,790 gå vidare i kommandotolken och skriv g redigera students.CSV i hopp om att 71 00:03:58,790 --> 00:04:00,850 att filen finns faktiskt. 72 00:04:00,850 --> 00:04:07,010 >> Gedit students.CSV ENTER, och faktiskt, märker att en fil som innehåller rent 73 00:04:07,010 --> 00:04:11,320 text, utan text separerade med kommatecken för varje fält, existerar faktiskt. 74 00:04:11,320 --> 00:04:14,530 Och om vi använder, inte det CS50 apparaten, men en mer bekant Mac eller 75 00:04:14,530 --> 00:04:18,080 PC, visar det sig att vi kunde faktiskt öppna CSV-fil med en mer 76 00:04:18,080 --> 00:04:20,400 välbekanta program som Excel eller Numbers. 77 00:04:20,400 --> 00:04:22,906