歡迎您光臨本站 註冊首頁

關於鍵盤輸入文件的運用,求教!急急急!!

←手機掃碼閱讀     火星人 @ 2014-03-22 , reply:0

有一道linux c的題目,讓我編寫兩個程序,要求一個程序把三個人的姓名和賬號餘額信息通過一次流文件I/O操作寫入文件「test-4-10file」,另一個格式輸出賬號信息,把每個人的賬號和餘額意義對應顯示輸出。(賬號和餘額由鍵盤輸入,餘額可以為小數)

1、我編寫了test-4-10fwrite.c和test-4-10fread.c如下:
test-4-10fwrite.c:
#include
#include
#define nmemb 3
struct test
{
char name[20];
double pay;
}s[nmemb];
int main()
{
FILE * fp;
int i;
double f;

if((fp=fopen("test-4-10file","a+"))==NULL)
{
printf("打開(創建)文件出錯");
exit(0);
}
for(i=0;i {
printf("請輸入帳號:");
fgets(s.name,20,stdin);
printf("請輸入餘額:");
scanf("%lf",&s.pay);
}
fwrite(s,sizeof(struct test),nmemb,fp);
fclose(fp);
return 0;
}
/*---------------------------------------------------------------------------------------------*/
test-4-10fread.c:

#include
#define nmemb 3
struct test /*定義結構體*/
{
char name[20];
int pay;
}s[nmemb];
int main( )
{
FILE * fp; /*定義文件變數指針*/
int i;
fp = fopen("test-4-10file", "r"); /*打開文件*/
fread(s,sizeof(struct test),nmemb,fp); /*調用fread函數從文件讀取塊信息*/
fclose(fp); /*關閉文件流*/
for(i=0;i printf("帳號[%d]:%-20s餘額[%d]:%d\n",i,s.name,i,s.pay);
return 0;
}
/*--------------------------------------------------------------------------------------------*/

2、然後編譯
gcc test-4-10fwrite.c -o test-4-10fwrite
gcc test-4-10fread.c -o test-4-10fread

3、最後運行
./test-4-10fwrite /下面為運行結果/
請輸入帳號:張三
請輸入餘額:12345
請輸入帳號:請輸入餘額:200
請輸入帳號:請輸入餘額:100
./test-4-10fread
帳號[0]:張三
餘額[0]:0
帳號[1]:��@
餘額[1]:0
帳號[2]: 餘額[2]:0
/*-------------------------------------------*/
疑問: for(i=0;i {
printf("請輸入帳號:");
fgets(s.name,20,stdin);
printf("請輸入餘額:");
scanf("%lf",&s.pay);
}
為什麼此循環中輸入賬號(即fgets(s.name,20,stdin))只運行了一次?
應該怎麼改?
我想要的結果是:
./test-4-10fwrite
請輸入帳號:張三
請輸入餘額:12345
請輸入帳號:李四
請輸入餘額:200
請輸入帳號:王五
請輸入餘額:50000
./test-4-10fread
帳號[0]:張三 餘額[0]:12345
帳號[1]:李四 餘額[1]:200
帳號[2]:王五 餘額[2]:50000

請大?鬧傅跡〈笮唬。。?/td>

[火星人 ] 關於鍵盤輸入文件的運用,求教!急急急!!已經有328次圍觀

http://coctec.com/docs/linux/show-post-101206.html