看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《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