作者firejox (Tangent)
看板C_and_CPP
標題Re: [問題] 寫入至檔案串流
時間Fri Aug 19 21:28:41 2011
※ 引述《atx236529 (坐領肝薪)》之銘言:
: ※ 引述《atx236529 (坐領肝薪)》之銘言:
: : 開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
: : gcc
: : 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
: : 問題(Question):
: : 不好意思,新手一問...
: : 今天卡在一個問題在於printf是將資料顯示(寫入)在命令提字元,而fprintf則是由檔案
: : 寫入另一個檔案(?),在下今天想寫一個記帳的程式,就是想說用鍵盤輸入資料後寫入
: : 文字檔中,照這樣的邏輯下,我是否要先寫入一個文字檔再複製過去?但這樣根本是多此
: : 一舉吧??是我哪邊的觀念錯了,還望大哥們指點一下fprintf printf fscanf scanf的用法
: : 差異,因為以前都是在命令題字元執行,現在接觸到輸入輸出就亂了套了...
: : 餵入的資料(Input):
: : 預期的正確結果(Expected Output):
: : 錯誤結果(Wrong Output):
: : 程式碼(Code):(請善用置底文網頁, 記得排版)
: : 補充說明(Supplement):
: 以下是小弟程式碼(寫到一半)
: FILE *fp1;
: int main()
: {
: int breakfast,lunch,dinner,others,sum;
: char filename[50],str[100];
: printf("請輸入來源檔名:");
: scanf("%s",filename);
: fp1=fopen(filename,"a+");
: if(fp1 == NULL){
: printf("error");
: exit(1);
: }
: printf("讀取並寫入中...\n");
: printf("日期:\n");
: while((fgets(str,100,stdin))!='0a'){
: fputs(str,fp1);
: }
: printf("breakfast:\n");
: fclose(fp1);
: return 0;
: }
: 可是就如前面所說的會卡在如何在我按下ENTER或鍵盤輸入什麼才能停止寫入並跳出?
首先是
命令提示字元 並不是
命令提字元
還有先搞清楚每一步驟
讀檔 和
寫檔 是兩回事
而且你忽略了中間作為
暫存的記憶體
______ ______ ______
| | Input | | Output |file_w|
|file_r| ------->|
Memory|-------->|
stderr|
|
stdin | read | | write |
stdout|
|______| |______| |______|
而
stdin ,
stdout,
stderr 則分別是
標準輸入流,
標準輸出流,
標準錯誤流
在C標準裡 處理檔案 是以檔案流的方式呈現
鍵盤 以及 螢幕 --> 也可以視為一種檔案資料
所以用stdin stdout來代表
===========================================
fgets 的型態是
char* fgets (char* str, int num,FILE* stream)
這是
字元指標 而不是
字元
先搞清楚這之間的差異性 而不是隨便亂用而已
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 123.240.129.235
※ 編輯: firejox 來自: 123.240.129.235 (08/19 21:47)
推 angleevil:給firejox掌聲 08/19 21:31
推 tropical72:f 大好有心啊 !! (worship) 08/19 21:47
推 loveme00835:看來原po也想上板標 08/19 22:01
推 xatier:原PO學弟快上版標吧! 08/19 22:58
→ angleevil:= =? 08/20 14:38
推 atx236529:感謝您,我確實忽略記憶體這塊,真是致命錯誤,感激不盡! 08/20 14:53