第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

請(qǐng)問(wèn),函數(shù)fread()和fwrite()的一些問(wèn)題,具體看下面內(nèi)容!

請(qǐng)問(wèn),函數(shù)fread()和fwrite()的一些問(wèn)題,具體看下面內(nèi)容!

慕仙森 2021-10-21 19:15:05
#include<stdio.h>struct cz{int month;float in;float out;}b[40]={0,0,0};int k=0; //將循環(huán)體中的限制條件k 設(shè)為全局變量。//k始終是你成功寫入的次數(shù)。 void savedate(int k);void loaddate();void cheak();main(){ int input();int i;printf("如果你是第一次輸入請(qǐng)留意是否有記錄,如果有記錄請(qǐng)先載入,再輸入否則記錄會(huì)被覆蓋。\n\n\n");for(;;){ printf("1.輸入收入或支出。\n2.查詢某月記錄。\n3.讀取數(shù)據(jù)。\n4.離開(kāi)\n");scanf("%d",&i);if(i==1){k=input(); //只寫input()也可以。因?yàn)橐呀?jīng)返回一個(gè)k值。k++; //保證k始終是你成功寫入的次數(shù)。 }elseif(i==2)cheak();elseif(i==3)loaddate();elsebreak;}}int input(){ printf("請(qǐng)輸入月份\n");scanf("%d",&b[k].month); //注意其中的k為全局變量。printf("請(qǐng)輸入收入情況\n");scanf("%f",&b[k].in);printf("請(qǐng)輸入支出情況\n");scanf("%f",&b[k].out);savedate(k+1); //將k加1傳到函數(shù)savedate,因?yàn)閟avedate是void沒(méi)有返回值,所以在input中k還是未加1前的值。return(k);} void cheak(){int i,n;float t=0;printf("請(qǐng)輸入要查詢的月份:\n");scanf("%d",&n);printf("您此次的記錄是:\n");printf("月份\t收入\t支出\t總余額\n");for(i=0;i<k;i++){ if(b[i].month==n){printf("%3d\t%0.2f\t%0.2f\n",b[i].month,b[i].in,b[i].out);}}for(i=0;i<k;i++){if(b[i].month==n)t=t+b[i].in-b[i].out;}printf("\t\t\t%0.2f\n",t);}void savedate(int k){FILE *fp;int i;if((fp=fopen("count.txt","wb"))==NULL){printf("cannot open file\n");return;}fwrite(&k,sizeof(int),1,fp);//將你成功寫入的次數(shù)k也寫入文件。 這個(gè)語(yǔ)句的位置不能隨便移動(dòng)。為什么? 推測(cè)與讀入順序有關(guān)。 for(i=0;i<k;i++)  { if(fwrite(&b[i],sizeof(struct cz),1,fp)!=1) //先寫入文件在判斷是否為真. printf("file write error\n");}fclose(fp);}void loaddate(){FILE *fp;int i;if((fp=fopen("count.txt","rb"))==NULL){printf("cannot open file\n");return;}fread(&k,sizeof(int),1,fp); //讀取之前成功寫入的次數(shù)k。printf("月份\t收入\t支出\n"); for(i=0;i<k;i++){ fread(&b[i],sizeof(struct cz),1,fp);printf("%3d\t%0.2f\t%0.2f\n",b[i].month,b[i].in,b[i].out); //讀取之前的數(shù)據(jù),特別注意,打開(kāi)文件不等于讀取文件。打開(kāi)之后不讀,數(shù)據(jù)則不會(huì)還原。}fclose(fp);}問(wèn)題主要是在void savedate(int k)函數(shù)中將 fwrite(&k,sizeof(int),1,fp);放到fclose(fp);前時(shí)程序會(huì)出錯(cuò)了。為什么。
查看完整描述

1 回答

?
白板的微信

TA貢獻(xiàn)1883條經(jīng)驗(yàn) 獲得超3個(gè)贊

fwrite(&k,sizeof(int),1,fp)

k 是記錄的個(gè)數(shù),
本句是在文件中“第一個(gè)字”寫入 一整形數(shù)標(biāo)記了本文件中總的記錄的個(gè)數(shù)
是在第一個(gè)字位置,當(dāng)然不可以放到文件尾,在讀如程序部分,首先讀出該整形
數(shù)
在void loaddate() 中
fread(&k,sizeof(int),1,fp); //讀取之前成功寫入的次數(shù)k。

如果將 k write 到 文件尾 ,失去了意義,并且讀出程序也需要修改
讀出程序如果不能在開(kāi)始判斷出記錄的個(gè)數(shù),必須一次次檢測(cè)直到讀出遇到文件尾或是失敗

不記錄k 也可以家解決讀取個(gè)數(shù)在讀取前知道的問(wèn)題

loaddate()中 使用

fseek(fp,0,SEEK_END);
long L=ftell(fp);
k=L/sizeof(cz);
fseek(fp,0,SEEK_SET);

查看完整回答
反對(duì) 回復(fù) 2021-10-24
  • 1 回答
  • 0 關(guān)注
  • 226 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)