14.6.1
#include #include Int main() {
FILE *fp1,*fp2; Int n;
Char ch,filename[20],str[30];
If(fp1=fopen((“C:\\123.txt,r”)==NULL) {
Printf(“can not open the file!\\n”); Exit(0); }
Ch=fgetc(fp1); While(ch!=EOF) {
Putchar(ch); Ch=fgetc(fp1); }
N=Ftell(fp1); Fgets(str,n,fp1);
Printf(“please input filename:\\n”);
/*宏定义调用*/
Scanf(“%s”,&filename); Fp2=fopen(“filename”,”w”); Fputs(str,fp2); Fclose(fp1); Fclose(fp2); }
程序修改如下
这里注意了fp=fopen(const char *path,const char *mode)原型 Fgets(字符数组名,n,文件指针) 注意了这里
n是包括“\\0”的 所以下面程序
中会是n+1 不然会出错
#include #include int main() { FILE *fp1,*fp2; int n; char ch,filename[20],str[30]; if((fp1=fopen( { printf( exit(0); } ch=fgetc(fp1); while(ch!=EOF) { putchar(ch); ch=fgetc(fp1); } printf( n=ftell(fp1); printf( rewind(fp1); fgets(str,n+1,fp1); printf( scanf( fp2=fopen(filename, fputs(str,fp2); fclose(fp1); fclose(fp2); return 0; }
答案
#include main() {
FILE *in,*out; /*定义两个指向FILE类型结构体的指针变量*/ char ch, infile[50], outfile[50]; /*定义数组及变量为基本整型*/ printf( scanf( /*输入将要被复制的文件所在路径及名称*/ printf( scanf( /*输入新建的将用于复制的文件所在路径及名称*/ if ((in = fopen(infile, /*以只写方式打开指定文件*/ {
printf( exit(0); }
if ((out = fopen(outfile, {
printf( exit(0); }
ch = fgetc(in); while (ch != EOF) {
fputc(ch, out); //这个程序就简化多了 /*将in指向的文件的内容复制到out所指向的文件中*/ ch = fgetc(in); }
fclose(in); fclose(out); }
14.6.2
#include Struct student {
Float math; Float chinese; Float english; }stu[i];
Int main() {
FILE *fp; Int n;
Char filename[20];
Printf(“please enter the number of students:\\n”); Scanf(“%d”,&i); For(n=0;n
Puts(please enter the sorce of students:);
Scanf(“%f,%f,%f\\n”,&stu[i].math,&stu[i].chinese,&stu[i].english); }
Puts(please input the filename:) Scanf(“%s”,&filename); Fp=fopen(filename,”w”); Fputs(stu,fp); Fclose(fp); Return 0; } 答案
#include #include struct score_list /*定义结构体存储学生成绩信息*/ {
char name[10]; int math; int Chinese; int English; } score[100];
void save(char *name, int n) /*自定义函数save*/ {
FILE *fp; /*定义一个指向FILE类型结构体的指针变量*/ int i;
if ((fp = fopen(name, /*以只写方式打开指定文件*/ {
printf( exit(0); }
for (i = 0; i < n; i++)
if (fwrite(&score[i],地址开始写入 sizeof(struct score_list), 1, fp) != 1) /*将一组数据输出到fp所指的文件中*/
printf( /*如果写入文件不成功,则输出错误*/ fclose(fp); /*关闭文件*/ }
main() {
int i, n; /*变量类型为基本整型*/ char filename[50]; /*数组为字符型*/ printf( scanf( /*输入学生数*/ printf( scanf( /*输入文件所在路径及名称*/ printf( for (i = 0; i < n; i++) {
printf(
scanf(
&score[i].math,&score[i].Chinese,&score[i].English); save(filename, n); } }
/*输入学生成绩信息*/ /*调用函数save*/