PCDVD數位科技討論區
PCDVD數位科技討論區   註冊 常見問題 標記討論區為已讀

回到   PCDVD數位科技討論區 > 其他群組 > 疑難雜症區
帳戶
密碼
 

回應
 
主題工具
starskgb
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=
舊 2003-10-02, 10:53 AM #1
回應時引用此文章
starskgb離線中  
starskgb
Regular Member
 

加入日期: Dec 2002
您的住址: 台北
文章: 98
重點就是...為什麼當我輸入完資料...程式也有開一個檔...但它就是空白的...完全沒有寫入...

ps.這是通訊錄程式...功能簡化過了,就是在dos底下輸入[exe檔名] [要存的檔.txt]
然後就開始跑了...

讀資工真苦...
 
__________________
=kgb=
舊 2003-10-02, 10:56 AM #2
回應時引用此文章
starskgb離線中  
Lucas Chen
Power Member
 
Lucas Chen的大頭照
 

加入日期: May 2001
您的住址: Death Star
文章: 520
用什麼compiler?
有debug工具可以trace變數會比較快知道原因
如果就只是直接compiler compile成binary
那就要把你的程式拆開來try了

讀資工是你自己選的
不要抱怨...

寫程式永遠debug時間大於coding...
以前寫assembly還沒工具可用
一定要用debug看暫存器..
__________________
May The Force Be With You.
我不喜歡注音文...非必要的語詞打注音文
我選擇不回應
話多,並不代表言之有物..自勉之
舊 2003-10-02, 11:10 AM #3
回應時引用此文章
Lucas Chen離線中  
Crazynut
Master Member
 

加入日期: Apr 2001
您的住址: 高雄
文章: 2,247
學任何程式語言都必須知道Debug的方法,有些可以設定偵錯點,一點一點pause後按鍵繼續(或傳回變數),有些可以使用trace工具。並不是只要學寫就可以了。
__________________
簽名檔真是礙眼…還是讓版面乾淨點吧!
舊 2003-10-02, 12:12 PM #4
回應時引用此文章
Crazynut離線中  
substar999
Master Member
 

加入日期: Sep 2001
您的住址: K
文章: 1,507
引用:
Originally posted by starskgb
重點就是...為什麼當我輸入完資料...程式也有開一個檔...但它就是空白的...完全沒有寫入...

ps.這是通訊錄程式...功能簡化過了,就是在dos底下輸入[exe檔名] [要存的檔.txt]
然後就開始跑了...

讀資工真苦...

樓上的前輩講了那麼多,小弟就來說說樓主程式的問題吧
首先我想問樓主的是
你有試著輸入兩筆不同資料然後儲存嗎?
你是不是會發現只存了第一筆??
其關鍵是,當程式收到要存檔離開時,但前面不是早就輸入一筆資料了..
但你有修改紀錄筆數的變數嗎??
若你能注意到這點...問題便能解決...
另外,你開檔先讀入資料的方式並不是很好...
(這樣你的檔案就只能輸入100筆資料了)
試著以append的方式加入吧...
ps1.對了,你的存檔和讀檔程式部分都有問題....都要修改喔...
ps2.函數本身呼叫函數本身固然可行,但我並不認為你這程式需要用到這種方法
試試看for或while迴圈來改寫吧~~
舊 2003-10-02, 04:29 PM #5
回應時引用此文章
substar999離線中  


回應


POPIN
主題工具

發表文章規則
不可以發起新主題
不可以回應主題
不可以上傳附加檔案
不可以編輯您的文章

vB 代碼打開
[IMG]代碼打開
HTML代碼關閉



所有的時間均為GMT +8。 現在的時間是08:16 PM.


vBulletin Version 3.0.1
powered_by_vbulletin 2026。