青岛网站建设团队,营销网站建设的公司,百度站长平台链接,世界军事新闻数值如12345等可以作为字符#xff0c;所以以字符格式读取文件时#xff0c;这些数字照样可以被读取 A fscanf(fileID,formatSpec) A fscanf(fileID,formatSpec,sizeA) 以上是fscanf的语法#xff1b; sizeA起到的作用是限制#xff0c;限制读取读取文件中数据的数量所以以字符格式读取文件时这些数字照样可以被读取 A fscanf(fileID,formatSpec) A fscanf(fileID,formatSpec,sizeA) 以上是fscanf的语法 sizeA起到的作用是限制限制读取读取文件中数据的数量 举例来说 John 1995 12 5 12.3 3.24 Tom 1995 12 7 2.3 2.0 Jean 1996 3 2 10.2 0 假如说文件中有这么一组数 说明每个空白间隔为一个数据 第一个数据为‘John’是一个字符串读取的格式为fprintffid,%s or %c,sizeA 注意%s是读取字符串不包括空白即读取完后数据之间无空白间隔John199512512.3 而%c是逐个字符读取包括空白即读取完后数据之间有空白间隔John 1995 12 5 说完读取的部分再来说说sizeA是如何控制fscanf函数的。sizeAN的情形 1对于字符读取采用%s %s是一个字符串一个字符串进行读取的fprintffid,%s,sizeA sizeA可以使单个整数N也可以是[m n] 我们先运行N取值为1 3 5 clear; fid fopen(fscanfsample.txt,r); i 1; name fscanf(fid,%s,1) name John clear; fid fopen(fscanfsample.txt,r); i 1; name fscanf(fid,%s,2) name John1995 clear; fid fopen(fscanfsample.txt,r); i 1; name fscanf(fid,%s,5) name John199512512.3 可以看到%s每次读取一个字符串前面提到数字都可以当成字符串但字符串不能当为数字 所以sizeA1是读取一个字符串sizeA2时读取两个字符串5时读取5个字符串并且没有空白间隔 所以sizeA其实就是控制fscanf读取数据的数目 fscanf读取数据的时候是横向读取而SizeA是控制读取的数目 2那么对于%c同样如此只不过%c是一个一个字符去读因此sizeA要扩大比如读取第一个字符串John 对于%s,sizeA1即可但对于%c则sizeA需要等于4才可读出。 3对于数值的读取同样代表读取的数据个数但需要注意的是%d指的是整数%f指的是浮点数我们看该文件第一行1995 12 5都是整数如果写fscanf(fid,%d,3)那么肯定能把这三个整数读到并且按照列进行排列如果写fscanf(fid,%d,4)由于12.3由整数和小数两部分构成因此小数点以前的12可以被读出来但是小数点和小数点后的3无法读出来因为不是整数。如果写fscanf(fid,%d,5)照样只读到12.3的12就停止因为不满足要求之后fscanf会停止运行。返回之前读取的数据。 4fscanf 函数在整个文件中重新应用该格式并将文件指针定位在文件结尾标记处。如果 fscanf 无法将 formatSpec 与数据相匹配将只读取匹配的部分并停止处理 以上讲的都是sizeAN的情形接下来将sizeA[m n]的情形 1对于字符串 字符串数据类型为charchar没有矩阵一说字符串string的引用一般直接写str(i)即可如str’I love China‘, str(1)I,str(5)v,不能写为str(3,3),会报错 str(3,3) 索引超出数组边界(不能超出 1)。 但是可以写str(1,3),相当于str(3)等于‘l 因此对于字符串一般不需要也不用[m n]. (2) 对于数据类型 以此文件为例由于第一个“john’为字符串因此直接运行fscanf(fid,%d或%f[m n]无法读取数据因为数据类型不满足会自动停止运行。 所以我们这里把Name列删除删除之后为 1995 12 5 12.3 3.24 1995 12 7 2.3 2.0 1996 3 2 10.2 0 这里我们可以看到如果要想把所有数据读出来sizeA用N表示应该为12。 另外该文件数据有整数和小数如果用%d读的话按行进行遇到第一个小数点12.3只会读取到12点后边的就无法读取因此要想把所有数据读出需要用%f来进行。 我们执行fscanf(fid,%f,[2 3]),得到结果如下 Afscanf(fid,%f,[2 3]) A 1.0e03 * 1.9950 0.0050 0.0032 0.0120 0.0123 1.9950 发现fscanf从1995开始共读取6个数据并按照2行3列进行排列到这里我们就会发现对于数据类型sizeA[m n] 会使fscanf读取的数据个数为Nm*n个数据并将他们按照m行n列进行排序排序的时候先进行列排序再进行行排序因此行数m肯定是有限个数n却可以使无穷大的即inf。