📄 66.c
字号:
/*文件类的各种函数的用法及特点*/
#include<stdio.h>
void file1();
void file2();
void file3();
void file4();
void file5();
void file()
{
// file1();
// file2();
// file3();
// file4();
file5();
}
void file1()
{
FILE *fp;
char f[20];
char ch;
printf("enter f:\n");
scanf("%s",f);
if((fp=fopen(f,"r"))==NULL) //文件的读取格式
{
printf("the file is null");
exit(0);
}
while((ch=fgetc(fp))!=EOF)//从文件中获取字符
// putchar(ch);
fputc(ch,stdout);
printf("\n");
fclose(fp);
}
void file2()
{
FILE *fp;
char f[20];
char ch;
printf("enter f:\n");
scanf("%s",f);
// gets(f);
// getchar();
if((fp=fopen(f,"w"))==NULL) //文件写格式,现判断文件是否存在,如果不存在,就创建一个
{
printf("this file is null!");
exit(0);
}
while((ch=getchar())!='#')//向文件中写内容,直到#符号结束
fputc(ch,fp);
printf("\n");
}
void file3()
{
FILE * fp;
char file[20], str[10];
int flag=1, i=0; /* flag,=1:开始新行。i为行号 */
printf ("Enter filename:");
scanf("%s",file);
if ( (fp=fopen(file, "r")) == NULL ) /* 打开文件 */
{
printf("file1 open error.\n");
exit (0);
}
while ( fgets( str,10,fp )!=NULL ) /* 读出字符串 */
{
if (flag)
{
printf ("%3d:%s",++i,str); /* 显示行号 */
}
else
{
printf ("%s", str);
}
if ( str [strlen(str)-1] == '\n' )
{
flag=1;
}
else
{
flag=0;
}
}
fclose (fp);
}
void file4()
{
FILE *fp1, *fp2;
char file1[20], file2[20], s[10];
printf ("Enter filename1:");
scanf("%s",file1);
printf ("Enter filename2:");
scanf("%s",file2);
if ( (fp1=fopen(file1,"r")) == NULL ) /* 打开文件1 */
{
printf("file1 open error.\n");
exit (0);
}
if ( (fp2=fopen(file2,"w")) == NULL ) /* 打开文件2 */
{
printf("file2 open error.\n");
exit (0);
}
while ( fgets(s,10,fp1) != NULL ) /* 从fp1读出字符串 */
fputs ( s, fp2 ); /* 将字符串写入文件fp2中 */
fclose (fp1);
fclose (fp2);
}
void file5()
{
FILE *fp;
char f[20],ch,str[10000];
int i=0,j=0;
int x; //记录字符串的实际长度
int y; //记录//的位置
int a; //标记有//存在
static int b=0; //标记有/*存在
static int z=0; //标记/*的位置
static int r=0; //记录行数
printf("enter filename!:");
scanf("%s",f);
if((fp=fopen(f,"r"))==NULL)
{
printf("file1 open error.\n");
exit (0);
}
while( fgets(str,81,fp)!=NULL)
{
a=0;
x=strlen(str);
for(i=0;i<x;i++) //记录一次循环
{
if(str[i]=='/'&& str[i+1]=='/') //判断是否有//存在
{
y=i; //记录//的位置
a=1; //标记有//存在
break;
}
else if(str[i]=='/'&& str[i+1]=='*') //判断是否有/*存在
{
z=i; //标记/*的位置
b=1; //标记有/*存在
if( str[x-3]=='*' && str[x-2]=='/') //在有/*存在的情况下 判断是否有*/存在
{
b=0; // 有*/时 b=0
printf("%3d: ",r);
for(j=z;j<x;j++)
{
if(str[j]=='\n')
{
r++;
}
putchar(str[j]); //打印出本行
}//for
}
break;
}
else if(str[i]=='*'&& str[i+1]=='/') // 当/* 与*/不再同一行时
{
b=0;
printf("%3d: ",r);
++r;
putchar(str[i]);
putchar(str[i+1]);
putchar(str[i+2]);
break;
}
}
if(a==1) //打印出有//存在的注释行
{
printf("%3d: ",r);
for(j=y;j<x;j++)
{
if(str[j]=='\n')
{
r++;
}
putchar(str[j]);
}
}
if(b==1 ) //打印出/* 与 */之间的所有行
{
printf("%3d: ",r);
for(j=z;j<x;j++)
{
if(str[j]=='\n')
{
r++;
}
putchar(str[j]);
}//for
}//for
}//while
}//file5
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -