一级目录
二级目录
三级目录##
一、学习视频来自b站
网址:https://www.bilibili.com/video/BV1hx411U7jB?from=search&seid=8830558900216097559
二、学习过程:
2.1 建立文件
这是第一个txt文件,为了下面路径简单明了,放到D盘;路径为D:\\test1.txt ,关于路径请查看我的另一篇问章,在这里 \\两个斜杠,其中一个是转义字符的意思,如果写/则只用写一个。
这个文件同样也放到D盘,D:\test2.txt
程序中提到"行",空格和换行都停止读取,所以test2 文件也可这么写。
2.2 程序
// 文件操作.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "stdlib.h"
#include "string.h"
#define SIZE 100
int _tmain(int argc, _TCHAR* argv[])
{
FILE *fp1,*fp2;
char *filename1="D:\\test1.txt";
char *filename2="D:\\test2.txt";
char buf[SIZE] = {0};
char errcode;
char count;
int num1,num2,num3;
fp1=fopen(filename1,"r");
fp2=fopen(filename2,"r");
//if( (fp=fopen(filename,"r"))==NULL )
// {fprintf(stderr,"%s,%s\n",filename,"open failed!");//stderr 输出到屏幕;是个文件指针
// system("pause");
// return -1;
// }else printf("successfully open\n");
/*----------读取字符串----------*/
//count = fscanf(fp, "%s",buf);//fscanf 返回格式化参数的个数
//%s读的是一个单词,字符串,遇到空格、换行会停止读取
//count = fscanf(fp, "%[^\n]",buf);//读取完整一行的代码//需代替 do-while 循环
//用循环读
printf("\n/*------------读取test1.txt------------\n");
do //用循环读的时候""
{ count = fscanf(fp1, "%s",buf);
if(count>0)
{
fprintf(stderr,"%s ",buf);//???最后一个参数怎么是地址呢?这里还不太明白。
}else{ if(feof(fp1))
{
fprintf(stderr,"%s \n", "file end!");
} else
{
errcode=ferror(fp1); //ferror检查调用函数是否出错;返回值非0是出错了
fprintf(stderr, "%s \n", strerror(errcode)); //strerror 查找错误号
}
}
}
while(count>0);
/*----------读数字----------*/
//fscanf 是按行读取,遇到空格、换行都会停止。(空格和换行都是循环停止的标志,空格可以有多个)
//这里的"行"空格之间也可以看作一行。
//数字之间有,号可以一直读完这一行,逗号之间就是一个数字,这个数可以给赋给一个变量。
printf("\n/*------------读取test2.txt------------\n");
do{
count = fscanf(fp2, "%d,%d,%d",&num1,&num2,&num3);
//count是每次读取时,这一行的数据个数(在不遇到空格和换行符时)
if(count>0)
{
fprintf(stderr,"%d %d %d\n",num1,num2,num3);//输出
printf(" num1=%d\n num2=%d\n num3=%d\n",num1,num2,num3);
printf("这一行有%d个数\n\n",count);
}else{ if(feof(fp2))
{
fprintf(stderr,"%d \n", "file end!"); //到文件结尾标志。
} else
{
errcode=ferror(fp2); //ferror检查调用函数是否出错;返回值非0是出错了
fprintf(stderr, "%s \n", strerror(errcode)); //strerror 查找错误号
printf("有错误了\n");
}
}
}while((count)>0);
system("pause");
return 0;
}
运行结果