在上一篇博文中,我們介紹了如何開發前期的准備,以及簡單的類型輸出實例。
這篇博文,我要記錄一個for循環輸出的實例。並對此展開,改變成不同的三個小函數。
1 int main(int argc, const char * argv[]) 2 { 3 int count = 5; 4 NSLog(@"The numbers from 1 to %d:", count); 5 int i; 6 for (i=1; i<=count; i++) 7 { 8 NSLog(@"%d\n", i); 9 } 10 return (0); 11 }
學過C語言的朋友,可以很容易看明白上面的代碼。就是先輸出一行 “The numbers from 1 to 5:”。然后數字從1到5循環輸出。運行后的結果如圖:

接下來,我們將簡單的循環輸出數字改成循環輸出字符串,並計算每個字符串的長度。修改后的代碼如下:
1 int main(int argc, const char * argv[]) 2 { 3 const char *words[4]={"about","above","apple","A \"Macbook pro\""}; 4 int wordCount = 4; 5 int j; 6 for (j=0; j< wordCount; j++) 7 { 8 NSLog(@"%s is %lu characters long", words[j], strlen(words[j])); //%s 輸出字符串 9 } 10 return (0); 11 }
在上面的代碼中,const關鍵字表示,我們定義的是個不能被改變的字符串數組。數組中的最后一個字符串中,有‘“’要輸出,所有要對其進行轉義,用轉義字符”\“。
這樣,就可以通過for循環依次輸出字符串中的元素。%s是輸出字符串用的指示符,%lu是輸出整形數字用的指示符。strlen()函數是統計字符串長度用的。運行后的結果如圖:

接下來,我們進一步修改代碼,使得循環輸出的字符串不是從字符串數組中獲取,而是從文本文件中獲取的。
首先,我先給大家基本普及下用C語言來對文件讀取的基本操作。
(1)主要的操作有:fopen(打開文件) fclose(關閉文件);
(2)定義函數 FILE * fopen(const char * path, const char * mode);
PS:參數path字符串包含欲打開的文件路徑及文件名,參數mode字符串則代表着流形態。
mode有下列幾種形態字符串:
r:打開只讀文件,該文件必須存在。
r+:打開可讀寫的文件,該文件必須存在。
w:打開只寫文件,若文件存在則文件長度清為0,即該文件內容會消失。若文件不存在則建立該文件。
w+:打開可讀寫文件,若文件存在則文件長度清為零,即該文件內容會消失。若文件不存在則建立該文件。
a:以附加的方式打開只寫文件。若文件不存在,則會建立該文件,如果文件存在,寫入的數據會被加到文件尾,即文件原先的內容會被保留。
1 int main(int argc, const char * argv[]) 2 { 3 FILE *wordFile = fopen ("/Documents/ch2/ch2/words.txt", "r"); 4 //判斷文件是否為空 5 if(wordFile == NULL) 6 { 7 return (0); 8 } 9 char word[100]; 10 while (fgets(word, 100, wordFile)) 11 { 12 //統計的時候,要去掉后面的換行符 \n 13 word[strlen(word)-1] = '\0'; 14 //去掉后面的換行符 \r 15 word[strlen(word)-1] = '\0'; 16 NSLog(@"%s is %lu characters long", word, strlen(word)); 17 } 18 fclose(wordFile); 19 return (0); 20 }
