#include?"stdafx.h"

站在用戶的角度思考問(wèn)題,與客戶深入溝通,找到隴川網(wǎng)站設(shè)計(jì)與隴川網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名申請(qǐng)、網(wǎng)頁(yè)空間、企業(yè)郵箱。業(yè)務(wù)覆蓋隴川地區(qū)。
#include?string.h
#include?stdio.h
#include?stdlib.h
struct?STUDENT{
int?Number;
char?Name[32];
int??Class;
float?Score;
};
#define?IS_WHITE(ch)?((unsigned?char)ch=15?||?ch=='?')
//trim函數(shù)去除字符串str前后的空白字符
char?*trim(char?*str)
{
char?ch;
char?*p,?*q,?*r;
p=str;?q=str;?r=str-1;
while(1)
{
ch=*p;
if?(!IS_WHITE(ch))?break;
if?(ch==0)?break;
p++;
}
while(1)
{
ch=*p++;
*q=ch;
if?(ch==0)?break;
if?(!IS_WHITE(ch))?r=q;
q++;
}
*++r=0;
return?str;
}
int?InputStudent(const?char?*filename)
{
FILE?*f;
int?n;
char?str[200];
struct?STUDENT?student;
f=fopen(filename,"wb");
if?(f==NULL)?return?0;???//返回0表示失敗
for?(n=0;?;?++n)
{
printf("請(qǐng)輸入學(xué)號(hào):?");?scanf("%d",?student.Number);
if?(student.Number==0)?break;
while(1)
{
printf("請(qǐng)輸入姓名:");??gets(str);
trim(str);
if?(str[0]==0)?continue;?//確保姓名不為空
strncpy(student.Name,?str,?sizeof(student.Name)-1);
//上句確保輸入姓名長(zhǎng)度不超過(guò)31字節(jié)
break;
}
printf("請(qǐng)輸入班級(jí):\n");?scanf("%d",?student.Class);
printf("請(qǐng)輸入成績(jī):\n");?scanf("%f",?student.Score);
fwrite(student,?sizeof(student),1,?f);
//??????printf("%08d?%-32s?%-3d?%f\n",
//??????????student.Number,
//??????????student.Name,
//??????????student.Class,
//??????????student.Score);
}
fclose(f);
return?n;???//返回有多少個(gè)學(xué)生信息錄入
}
void?SortStudent(struct?STUDENT?*student,?int?n)
{
int?i,j;
struct?STUDENT?*a,?*b,?t;
for?(j=0;?jn-1;?++j)
{
a=student+j;
for?(i=j+1;?in;?++i)
{
b=student+i;
if?(a-Number=b-Number)?continue;?//否則交換
memcpy(t,a,sizeof(struct?STUDENT));
memcpy(a,b,sizeof(struct?STUDENT));
memcpy(b,t,sizeof(struct?STUDENT));
}
}
}
void?PrintStudent(const?struct?STUDENT?*student,?int?n)
{
int?i;
for?(i=0;?in;?++i,?++student)
printf("%08d?%-32s?%-3d?%6.1f\n",
student-Number,
student-Name,
student-Class,
student-Score);
}
void?main()
{
int?n1,?n2,?n;
struct?STUDENT?*student;
const?char?fn1[]="d:\\student1.bin";?//文件1
const?char?fn2[]="d:\\student2.bin";?//文件2
const?char?fn[]="d:\\student.bin";???//合并后的文件
FILE?*f;
printf("學(xué)生信息錄入(錄入過(guò)程中,學(xué)號(hào)輸入為0,則退出錄入)\n");
printf("第一步:%s中的學(xué)生信息錄入:\n",?fn1);
n1=InputStudent(fn1);
if?(0==n1)
{
printf("%s中的學(xué)生信息錄入有誤,退出程序\n",fn1);
return;
}
printf("第二步:%s中的學(xué)生信息錄入:\n",?fn2);
n2=InputStudent(fn2);
if?(0==n2)
{
printf("%s中的學(xué)生信息錄入有誤,退出程序\n",fn2);
return;
}
printf("第三步:合并%s,?%s\n",fn1,fn2);
student=(struct?STUDENT?*)malloc((n1+n2)*sizeof(struct?STUDENT));
f=fopen(fn1,"rb");
if?(f==NULL)?{printf("%s打開(kāi)失敗,退出程序\n",fn1);?return;}
n=fread(student,sizeof(struct?STUDENT),?n1,?f);
fclose(f);
if?(n!=n1)?{printf("%s讀入錯(cuò)誤,退出程序\n",fn1);?return;}
f=fopen(fn2,"rb");
if?(f==NULL)?{printf("%s打開(kāi)失敗,退出程序\n",fn2);?return;}
n=fread(student+n1,sizeof(struct?STUDENT),?n2,?f);
//??PrintStudent(student,n1+n2);??//輸出學(xué)生信息
fclose(f);
if?(n!=n2)?{printf("%s讀入錯(cuò)誤,退出程序\n",fn2);?return;}
n=n1+n2;
SortStudent(student,n);
f=fopen(fn,"wb");
if?(f==NULL)?{printf("%s建立失敗,退出程序\n",fn);?return;}
fwrite(student,?sizeof(struct?STUDENT),?n,?f);
fclose(f);
PrintStudent(student,n);??//輸出學(xué)生信息
free(student);
}
你問(wèn)的問(wèn)題好大,要合并兩份獨(dú)立的c語(yǔ)言代碼,
第一,要把兩份代碼里的main入口合并為一個(gè),
如何合并要看你期望合并后的main函數(shù)實(shí)現(xiàn)什么樣的功能,
例如,A程序是實(shí)現(xiàn)計(jì)算一個(gè)數(shù)組里的所有數(shù)相加后的和的值的功能;
B程序是實(shí)現(xiàn)輸出任意數(shù)字到一個(gè)txt文件的功能。那么合并A和B程序后,
一般就是將B程序里的main函數(shù)里的實(shí)現(xiàn)內(nèi)容追加到A程序里的main函數(shù)的實(shí)現(xiàn)內(nèi)容之后,
就算是合并后的main函數(shù)的內(nèi)容了。
希望你具體問(wèn)題具體分析。
第二,合并過(guò)程中要確認(rèn)兩份代碼有沒(méi)有標(biāo)識(shí)符命名上的重復(fù)的問(wèn)題。
例如兩份代碼里的公開(kāi)函數(shù)名有沒(méi)有相同的,如果相同的話肯定要改成不同的。
第三,在確認(rèn)了前兩點(diǎn)后,接著確認(rèn)編譯鏈接不出錯(cuò)。
第四,鏈接成功后,確認(rèn)運(yùn)行動(dòng)作是否符合期望。
當(dāng)然,實(shí)際項(xiàng)目中合并兩份代碼,往往不是上面這樣做了就可以了。還涉及到兩個(gè)程序中的功能的合并之類的比較復(fù)雜的工作。實(shí)踐出真知,希望你多做項(xiàng)目來(lái)收獲心得。
完整代碼如下,有任何疑問(wèn)可以追問(wèn)。
#include?stdio.h
#include?stdlib.h
int?merge(char?*in1,char?*in2,char?*out)
{
FILE?*f_in,*f_out;
int?n;
char?buf[4096];
//打開(kāi)輸出文件
f_out=fopen(out,"wb");
if(!f_out)?return?0;
//打開(kāi)并讀第一個(gè)文件寫到輸出文件
f_in=fopen(in1,"rb");
if(!f_in)?return?0;
while(n=fread(buf,1,sizeof(buf),f_in))
{
fwrite(buf,1,n,f_out);
}
fclose(f_in);
//打開(kāi)并讀第二個(gè)文件寫到輸出文件
f_in=fopen(in2,"rb");
if(!f_in)?return?0;
while(n=fread(buf,1,sizeof(buf),f_in))
{
fwrite(buf,1,n,f_out);
}
fclose(f_in);
fclose(f_out);
return?1;
}
int?main()
{
if?(!merge?(“1.txt”,?“2.txt”,?“3.txt”))
printf(“Failed”);
else
printf(“successfully”);
return?0;
}
描述的不清楚,是不是將兩個(gè)函數(shù)的代碼合并?
如果是的話合并函數(shù)a,b的方法就是新建一個(gè)函數(shù)c
函數(shù)類型
c(參數(shù)列表)
{
a();
b();
}
然后運(yùn)行c,如果不是的話,希望能描述的清楚一點(diǎn)
設(shè)A.txt和B.txt都在當(dāng)前目錄下,讀打開(kāi)A.txt和B.txt,寫打開(kāi)C.txt。按字符循環(huán)讀取A.txt文件一行并逐字符寫入C.txt文件,但當(dāng)讀到'\n'時(shí)不寫入\n'而啟動(dòng)另一內(nèi)循環(huán)按字符讀取B.txt文件的一行并逐字符寫入C.txt文件,當(dāng)寫入'\n'后跳出內(nèi)循環(huán)停止讀取B.txt文件轉(zhuǎn)而再去讀A.txt文件的下一行……如此反復(fù),直到遇到A.txt文件的EOF時(shí)結(jié)束。代碼如下:
//#include?"stdafx.h"http://If?the?vc++6.0,?with?this?line.
#include?"stdio.h"
#include?"stdlib.h"
int?main(void){
FILE?*fpa,*fpb,*fpc;
char?ch;
fpa=fopen("A.txt","r");
fpb=fopen("B.txt","r");
fpc=fopen("C.txt","w");
if(!fpa?||?!fpb?||?!fpc){
printf("Open?the?file(s)?failure...\n");
exit(0);
}
while((ch=fgetc(fpa))!=EOF){
if(ch=='\n')
while(fputc(ch=fgetc(fpb),fpc),ch!='\n'??ch!=EOF);
else?fputc(ch,fpc);
}
fclose(fpc);
fclose(fpb);
fclose(fpa);
return?0;
}
定義一個(gè)成員結(jié)構(gòu)體。
再定義此結(jié)構(gòu)體的兩個(gè)數(shù)組,數(shù)組大小是csv文件中存儲(chǔ)的成員數(shù)。
使用fscanf函數(shù)讀取A.csv的數(shù)據(jù)存入一個(gè)結(jié)構(gòu)體數(shù)組中,讀取B.csv的數(shù)據(jù)存入另一個(gè)結(jié)構(gòu)體數(shù)組中。
循環(huán)遍歷結(jié)構(gòu)體數(shù)組,把一個(gè)數(shù)組的元素值賦值給另一個(gè)數(shù)組的元素。這樣另一個(gè)結(jié)構(gòu)體數(shù)組就有了兩個(gè)csv文件中的數(shù)據(jù)。
使用fopen函數(shù)創(chuàng)建并打開(kāi)C.csv文件。
把數(shù)據(jù)完整的另一個(gè)結(jié)構(gòu)體數(shù)組的數(shù)據(jù)使用fprintf函數(shù)輸出到C.csv文件中。
本文標(biāo)題:c語(yǔ)言合并兩個(gè)文件的函數(shù),c語(yǔ)言將兩個(gè)文件合并
轉(zhuǎn)載注明:http://chinadenli.net/article30/dsgisso.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開(kāi)發(fā)、網(wǎng)站建設(shè)、自適應(yīng)網(wǎng)站、定制網(wǎng)站、用戶體驗(yàn)、企業(yè)網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)