赞
踩
思路:
step1
定义文件指针和字符变量,读入文件,判读是否有该文件。
step2
循环读入字符,并利用fputc(ch,fp),将键盘输入的字符写入磁盘文件,直到输入#结束读入。
step3
关闭文件,向屏幕输出一个换行符,putchar(10);
//10.3 顺序读写数据文件 #include <stdio.h> #include <stdlib.h> int main() { FILE *fp; char ch,filename[10]; printf("请输入所用到的文件名:\n"); scanf("%s",filename); if((fp=fopen(filename,"w"))==NULL) { printf("无法打开该文件\n"); exit(0); } ch=getchar(); //用来接收最后一个输入的回车符 printf("请输入一个准备存储到磁盘的字符串(以#结束)\n"); ch=getchar(); while(ch!='#') { fputc(ch,fp); putchar(ch); ch=getchar(); } fclose(fp); putchar(10); //向屏幕输出一个换行符 return 0; }
注意事项:
1.为什么要putchar(10)?
putchar(10)是将一个ASCII码值为10的控制字符输出到屏幕上,它代表了换行符(即Newline字符)。在C语言中,Newline字符用于结束一行文字并移到下一行。当您使用putchar(10)时,可以在屏幕上输出一个换行符,使得后续的输出可以显示在新的一行。这样可以让输出更加清晰易读。
2.ch=getchar(); //用来接收最后一个输入的回车符,这个是接收啥回车符,为什么?
在C语言中,当使用scanf()函数读取输入时,通常会在输入缓冲区中留下一个换行符(即回车符)。这是因为在用户通过键盘输入数据时,通常会在最后按下回车键来确认输入的结束。
例如,如果输入一个字符串并按下回车键,则输入缓冲区中会包含该字符串和一个回车符。当使用getchar()函数读取输入时,它会读取输入缓冲区中的下一个字符,而这个字符就是留在缓冲区中的回车符。
在代码中,通过调用getchar()函数,可以将输入缓冲区中的回车符读取出来并丢弃,从而避免让后续的输入读取到该回车符。这样可以保证程序能够正常地读取后续的输入,并避免潜在的bug。
step1 读入输入,输出文件的名称,并进行判断是否可读入。
step2 循环直到遇到输入文件的结束标志,循环条件为!feof(in)
step3 循环内部,使用fgetc(in)逐一读取字符,并使用fputc(out),将读取到的字符写入输出文件之中
step4 换行,关闭文件。
#include <stdio.h> #include <stdlib.h> int main() { FILE *in,*out; char ch,infile[10],outfile[10]; printf("请输入读入文件的名称\n"); scanf("%s",infile); printf("请输入读出文件的名称\n"); scanf("%s",outfile); if((in=fopen(infile,"r")) ==NULL) { printf("无法打开读入文件\n"); exit(0); } if((out=fopen(outfile,"w"))==NULL) { printf("无法打开读出文件\n"); exit(0); } while(!feof(in)) { ch=fgetc(in); fputc(ch,out); putchar(ch); } putchar(10); fclose(in); fclose(out); return 0; }
注意事项
1.#include <stdlib>是干嘛的?
具体来说,<stdlib.h> 头文件提供了以下功能:
内存管理函数:
malloc(), calloc(), realloc(): 用于动态分配内存。
free(): 用于释放之前分配的内存。
程序终止函数:
exit(): 用于正常或异常终止程序的执行,并返回到操作系统。
字符串转换函数:
atoi(), atol(), atof(): 用于将字符串转换为整数、长整数或浮点数。
伪随机数生成函数:
rand(): 用于生成一个伪随机数。
srand(): 用于设置随机数生成器的种子。
还有其他一些函数和类型定义,例如abs(), labs(), div(), system(), NULL等。
通过包含<stdlib.h>头文件,我们可以在程序中使用这些函数和类型定义,以实现相应的功能。
step1 定义字符串数组,其中str[3][10],定义的是一个可以存放三个字符串的数组,定义零时数组用于后续排序
step2 使用gets,通过for循环输入三个字符串
step3 通过两次循环,进行字符串从小到大排序,外层第一次循环,确定,第一个位置,第一小的字符串,内层循环,用于比较后面的值,找出最小的放到i位置,以此类推
step4 将排好序的字符串进行输入到文集中去。
#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { FILE *fp; char str[3][10], temp[10]; int i, j, k, n = 3; printf("Enter strings:\n"); for (i = 0; i < n; i++) gets(str[i]); // 选择法对字符串排序 for (i = 0; i < n - 1; i++) { k = i; for (j = i + 1; j < n; j++) { if (strcmp(str[k], str[j]) > 0) k = j; } if (k != i) { strcpy(temp, str[i]); strcpy(str[i], str[k]); strcpy(str[k], temp); } } if ((fp = fopen("string.txt", "w")) == NULL) { printf("can't open file\n"); exit(0); } printf("The new sequence:\n"); for (i = 0; i < n; i++) { fputs(str[i], fp); fputs("\n", fp); printf("%s\n", str[i]); } fclose(fp); // 关闭文件 return 0; }
注意事项:
1.str为二维数组,那么str[i]代表第i行,也就是第i行字符串
2.字符串之间的比较使用strcmp(s1,s2),如果s1>s2,那么返回的值>0,比较的方式为逐一比较,ASCII对应的值进行比较。
3.fputs(str,fp)的使用:向文件输入字符串。
step1 定义学生类型结构体,其中包含的成员为学生姓名,学号,年龄,宿舍号
step2 定义保存函数,通过文件指针打开文件,并写入学生信息
step3 再主函数进行输入10个学生的信息,并调用save()函数。
#include <stdio.h> #define SIZE 10 struct Student_type { char name[10]; int num; int age; char addr[15]; }stud[SIZE]; void save() { FILE *fp; int i; if((fp=fopen("stu.txt","wb"))==NULL) { printf("can't open the file\n"); return; } for(i=0;i<SIZE;i++) { if(fwrite(&stud[i],sizeof(struct Student_type),1,fp)!=1) printf("file write error\n"); } fclose(fp); } int main() { int i; printf("Please enter data of students\n"); for(i=0;i<SIZE;i++) { scanf("%s%d%d%s",stud[i].name,&stud[i].num,&stud[i].age,stud[i].addr); } save(); return 0; }
注意事项:
fwrite(&stud[i], sizeof(struct Student_type), 1, fp)
当你调用 fwrite 函数时,它会尝试将数据从内存写入到文件中。让我们来逐步解释一下这行代码:
&stud[i]:表示要写入的数据的起始地址。在这里,&stud[i] 表示第 i 个学生结构体的地址。
sizeof(struct Student_type): 表示要写入的每个数据项的大小。sizeof 运算符用于获取结构体或变量的大小(以字节为单位)。
1: 表示要写入的数据项的数量。在这里,我们每次写入一个 struct Student_type 结构体的数据。
fp: 表示要写入的文件指针,指定了要向哪个文件写入数据。
整个 fwrite 函数的作用是将 sizeof(struct Student_type) 字节大小的 stud[i] 结构体数据写入到文件指针 fp 所指向的文件中。接着,if 语句检查 fwrite 的返回值是否不等于 1。如果 fwrite 返回值不等于 1,那么意味着写入不完整,可能出现了错误。在这种情况下会输出 “file write error” 提示信息。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。