![]() |
||
|
Regular Member
![]() ![]() 加入日期: Dec 2002 您的住址: 台北
文章: 98
|
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); }
__________________
=kgb= |
|||||||
|
|
|
Regular Member
![]() ![]() 加入日期: Dec 2002 您的住址: 台北
文章: 98
|
重點就是...為什麼當我輸入完資料...程式也有開一個檔...但它就是空白的...完全沒有寫入...
ps.這是通訊錄程式...功能簡化過了,就是在dos底下輸入[exe檔名] [要存的檔.txt] 然後就開始跑了... 讀資工真苦...
__________________
=kgb= |
||
|
|
|
Power Member
![]() ![]() 加入日期: May 2001 您的住址: Death Star
文章: 520
|
用什麼compiler?
有debug工具可以trace變數會比較快知道原因 如果就只是直接compiler compile成binary 那就要把你的程式拆開來try了 讀資工是你自己選的 不要抱怨... 寫程式永遠debug時間大於coding... 以前寫assembly還沒工具可用 一定要用debug看暫存器..
__________________
May The Force Be With You. 我不喜歡注音文...非必要的語詞打注音文 我選擇不回應 ![]() 話多,並不代表言之有物..自勉之 |
|
|
|
Master Member
![]() ![]() ![]() ![]() 加入日期: Apr 2001 您的住址: 高雄
文章: 2,247
|
學任何程式語言都必須知道Debug的方法,有些可以設定偵錯點,一點一點pause後按鍵繼續(或傳回變數),有些可以使用trace工具。並不是只要學寫就可以了。
__________________
簽名檔真是礙眼…還是讓版面乾淨點吧! |
|
|
|
Master Member
![]() ![]() ![]() ![]() 加入日期: Sep 2001 您的住址: K
文章: 1,507
|
引用:
樓上的前輩講了那麼多,小弟就來說說樓主程式的問題吧 首先我想問樓主的是 你有試著輸入兩筆不同資料然後儲存嗎? 你是不是會發現只存了第一筆?? 其關鍵是,當程式收到要存檔離開時,但前面不是早就輸入一筆資料了.. 但你有修改紀錄筆數的變數嗎?? 若你能注意到這點...問題便能解決... 另外,你開檔先讀入資料的方式並不是很好... (這樣你的檔案就只能輸入100筆資料了) 試著以append的方式加入吧... ps1.對了,你的存檔和讀檔程式部分都有問題....都要修改喔... ps2.函數本身呼叫函數本身固然可行,但我並不認為你這程式需要用到這種方法 試試看for或while迴圈來改寫吧~~ |
|
|
|