![]() |
PCDVD數位科技討論區
(https://www.pcdvd.com.tw/index.php)
- 疑難雜症區
(https://www.pcdvd.com.tw/forumdisplay.php?f=34)
- - c的程式...
(https://www.pcdvd.com.tw/showthread.php?t=253377)
|
|---|
c的程式...
#include<stdio.h>
#include<string.h> #include<ctype.h> int xwin(); void insert(); void inarray(); void save(); FILE *cptr; struct book { char name[30]; char age[4]; char phone[15]; char email[30]; }; struct book file[100]; char choice, *data, *buf={ "" }; int count=0; int main( int argc, char *argv[] ) { if( argc != 2 ) printf( "輸入格式不正確!!!\n" ); else { if( ( cptr=fopen( argv[1], "r+" ) ) == NULL ) { cptr=fopen(argv[1],"w"); fclose(cptr); cptr=fopen(argv[1],"r+"); } data=argv[1]; inarray(); fclose(cptr); xwin(); } return 0; } int xwin() { printf("(i) insert\n(x) exit\nchoice:"); scanf("\n%c",&choice); switch (choice) { case 'i': insert(); break; case 'x': count--; save(); break; default: printf("沒有這選項!!!\n"); break; } return 0; } void insert() { char c; printf( "name: " ); scanf( "%s", file[count].name ); printf( "age(1-150): " ); scanf( "%s",file[count].age ); printf( "phone:" ); scanf( "%s", file[count].phone ); printf( "email: " ); scanf( "%s", file[count].email ); while( c != 'n'&&c != 'b'&&c != 'x' ) { printf( "\n(n)input next (b)back to main (x)exit and save data\nchoice:" ); scanf( "%c", &c ); } if(c=='n') { count++; insert(); } else { if(c=='b') { count++; xwin(); } else save(); } } void inarray() { int x=0; rewind(cptr); while (!feof(cptr)) { fgets( buf, 30, cptr ); sscanf( buf, "name:%s", file[x].name ); fgets( buf, 4, cptr ); sscanf( buf, "age:%s", file[x].age ); fgets( buf, 15, cptr ); sscanf( buf, "phone:%s", file[x].phone ); fgets( buf, 30,cptr ); sscanf( buf, "email:%s", file[x].email ); x++; } if(x==0) count=0; else count=x-1; } void save() //將所有現有的資料寫入到檔案。 { int counter=0; cptr=fopen(data,"w"); while (counter<count) { fprintf( cptr, "name:%s\n", file[counter].name); fprintf( cptr, "age:%s\n", file[counter].age); fprintf( cptr, "phone:%s\n", file[counter].phone); fprintf( cptr, "email:%s\n", file[counter].email); counter++; } fclose(cptr); } |
重點就是...為什麼當我輸入完資料...程式也有開一個檔...但它就是空白的...完全沒有寫入...
ps.這是通訊錄程式...功能簡化過了,就是在dos底下輸入[exe檔名] [要存的檔.txt] 然後就開始跑了... 讀資工真苦... |
用什麼compiler?
有debug工具可以trace變數會比較快知道原因 如果就只是直接compiler compile成binary 那就要把你的程式拆開來try了 讀資工是你自己選的 不要抱怨... 寫程式永遠debug時間大於coding... 以前寫assembly還沒工具可用 一定要用debug看暫存器.. |
學任何程式語言都必須知道Debug的方法,有些可以設定偵錯點,一點一點pause後按鍵繼續(或傳回變數),有些可以使用trace工具。並不是只要學寫就可以了。
|
引用:
樓上的前輩講了那麼多,小弟就來說說樓主程式的問題吧 首先我想問樓主的是 你有試著輸入兩筆不同資料然後儲存嗎? 你是不是會發現只存了第一筆?? 其關鍵是,當程式收到要存檔離開時,但前面不是早就輸入一筆資料了.. 但你有修改紀錄筆數的變數嗎?? 若你能注意到這點...問題便能解決... 另外,你開檔先讀入資料的方式並不是很好... (這樣你的檔案就只能輸入100筆資料了) 試著以append的方式加入吧... ps1.對了,你的存檔和讀檔程式部分都有問題....都要修改喔... ps2.函數本身呼叫函數本身固然可行,但我並不認為你這程式需要用到這種方法 試試看for或while迴圈來改寫吧~~ |
| 所有的時間均為GMT +8。 現在的時間是02:41 AM. |
vBulletin Version 3.0.1
powered_by_vbulletin 2026。