- #include <stdio.h>
- int main(){
- FILE *fileIn;
- FILE *fileOut;
- fileIn = fopen("input.txt", "r");
- if(fileIn == NULL){printf("檔案不存在\n"); return 0;}
- fileOut = fopen("output.txt", "w");
- /* Mod:
- * "r" : 開啟檔案,以純文字方式[讀取]。
- * "w" : 開啟或建立檔案,以純文字方式[寫入],會複寫原先的資料。
- * "a" : 開啟或建立檔案,以純文字方式[寫入],並將檔案指標移到最後。
- * "rb" : 同 "r" 但以二進位(binary)方式[讀取]。
- * "wb" : 同 "w" 但以二進位(binary)方式[寫入]。
- * "ab" : 同 "a" 但以二進位(binary)方式[寫入]。
- * "r+" : 同 "r" 但同時具有[讀取/寫入]的權力
- * "w+" : 同 "w" 但同時具有[讀取/寫入]的權力
- * "a+" : 同 "a" 但同時具有[讀取/寫入]的權力
- * "rb+" : 同 "rb" 但同時具有[讀取/寫入]的權力
- * "wb+" : 同 "wb" 但同時具有[讀取/寫入]的權力
- * "ab+" : 同 "ab" 但同時具有[讀取/寫入]的權力。
- */
- int a1;
- float a2;
- char a3;
- char a4[100];
- while(!feof(fileIn)){// 當讀取結束時會回傳 true
- // 依格式讀取一列文字,所有的變數都要取址,除了字元陣列
- fscanf(fileIn,"%d %f %c %s",&a1,&a2,&a3,a4);
- // 依格式將資料輸出至螢幕上
- printf("%d %f %c %s\n",a1,a2,a3,a4);
- // 依格式寫入一列文字
- fprintf(fileOut,"%d %f %c %s\n",a1,a2,a3,a4);
- /* %c : 一個字元(char)格式
- * %s : 一個字串格式
- *
- * %i : 一個整數(int)格式
- * %d : 一個十進位整數(int)格式
- * %u : 一個十進位無符號整數(unsigned)格式
- *
- * %e, %f, %g : 一個浮點數(float)格式
- * %lf: 一個浮點數(double)格式
- *
- * %o : 八進位(02732)格式
- * %x : 十六進位(0x27fa)格式
- * %% : 跳脫成 %
- * */
- }
- // 輸出當前的檔案指標位址
- printf("offset = %ld\n", ftell(fileIn) );
- // 將檔案指標返回至最上面,失敗則回傳 0
- // 會清除錯誤並將 EOF 標示清除
- // 當需要重新讀取時可利用此函數
- rewind(fileIn);
- // 將移動檔案指標從開始處偏移 5 個字元,成功則回傳 0
- // 會將 EOF 標示清除
- fseek(fileIn,5,SEEK_SET);
- /* int fseek( FILE *stream, long offset, int origin );
- * stream : 檔案指標
- * offset : 偏移量,可為正負數
- * origin : 偏移的依據位址
- * SEEK_SET 0 檔案起始位址
- * SEEK_CUR 1 當前位址
- * SEEK_END 2 檔案結束位址
- * */
- // 關閉檔案指標
- fclose(fileIn);
- fclose(fileOut);
- // 將檔案 "input.txt" 移除
- remove("input.txt");
- // 將 "output.txt" 的檔案名稱變更為 "input.txt"
- rename("output.txt","input.txt");
- // 按任意鍵結束
- _getch();
- return 0;
- }
參考來源:
Standard C I/O [C++ Reference]
printf() 與 scanf()
0 回應:
張貼留言