有一个笨办法,那就是将文档从头到尾读一遍,记下换行符
的个数,就是它的行数(如果换行符不是最后一个话,
需要加1)。
代码如下:
//求指定文件的行数
int line_count(char* path)
{
FILE *f=fopen(path,"r")
int count=0//行数计数器
char c
int flag//标志
for(flag=fscanf(f,"%c",&c)flag!=EOF &&flag>0flag=fscanf(f,"%c",&c))
{
if(c=='\n')count++
}
if(c!='\n')count++
fclose(f)
return count
}
对于这个问题,你可以采用逐个读取字符,
空格之前的型链字符写入文件1,换行符之前的字符写入文件2,
这样自然也就将它分成了你要求的两个文档
代码如下:
//将文件path中的内容分为两部分,分别存入outFile1,outFile2,并返回文件path的行数昌租滑
int split(char* path, char* outFile1,char* outFile2)
{
FILE *r=fopen(path,"r")//输入文件
FILE *w1=fopen(outFile1,"w")//输出文件1
FILE *w2=fopen(outFile2,"w")//输出文件2
if(r==NULL || w1==NULL || w2==NULL)
{
//打开文件失败,可以添加其它错误处理
return -1
}
int eof//用于指示是否已经到达文件末尾耐腊
char c//读入的字符
bool b=true//b为true时,写入输出文件1,否则写入输出文件2
int count=0//文件行数
for(eof=fscanf(r,"%c",&c)eof!=EOF &&eof>0eof=fscanf(r,"%c",&c))
{
switch(c)
{
case ' '://碰到换行符
b=false
fprintf(w1,"\n")
break
case '\n'://碰到换行符
b=true
fprintf(w2,"\n")
count++//行数加1
break
case '\r'://该字符总与\n成对出现,忽略
break
default:
if(b==true)
fprintf(w1,"%c",c)
else
fprintf(w2,"%c",c)
break
}
}
if(c!='\n')count++//最后一个字符不是换行符,应将行数加1
fclose(w1)
fclose(w2)
fclose(r)
return count
}
调用方式为:
int lineCount=split("C:\\a.txt","C:\\a1.txt","C:\\a2.txt")
祝你好运!
C选项。
“文件指针名”必须是被说明为FILE 类型的指针变量;
“文件名”是被打开文件的文件名;
“使用文件方式”是指文件的类型和 *** 作要求。
“文件名”是字符串常量或字符串数组。
例如:
FILE *fp;
fp=("file a","r")
其意义是在当前目录颂消槐下打开文件file a,只允许进行“读” *** 作,桥友并使fp指向该文件。
又如:
FILE *fphzk
fphzk=("c:\\hzk16","rb")
其意义是打开C驱动器磁盘的根目录下的文件hzk16,这是一个二进制文件,只允许按二进制方式进行读 *** 作。两个反斜线“\\ ”中的第一个表示转义字符,第二个表示根目录。
扩展资料:
C语言包野友含的各种控制语句仅有9种,关键字也只有32 个,程序的编写要求不严格且以小写字母为主,对许多不必要的部分进行了精简。实际上,语句构成与硬件有关联的较少,且C语言本身不提供与硬件相关的输入输出、文件管理等功能,如需此类功能,需要通过配合编译系统所支持的各类库进行编程,故c语言拥有非常简洁的编译系统。
c语言的处理和表现能力都非常的强大,依靠非常全面的运算符和多样的数据类型,可以轻易完成各种数据结构的构建,通过指针类型更可对内存直接寻址以及对硬件进行直接 *** 作,因此既能够用于开发系统程序,也可用于开发应用软件。
参考资料来源:百度百科-C语言
先以追加的方式用扰坦fopen函数打开文件,如:fp=fopen("filename","a");然后用缓磨桐格式化读写函数在文件末尾写一行游戚,如:fprintf("stdin,"%s\n",fp)。其中stdin是标准输入文件(指键盘),%s是格式控制符(这里是字符输入),fp是刚才打开的那个文件的指针。写完文件后,记得关闭文件,用fclose(fp)。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)