matlab fscanf无法读入空格,C语言中fscanf()函数读空格的问题解决办法

fscanf()函数是C语言中的文件格式化读取函数,其使用空格、Tab、回车来分割不同单词,使用起来比较方便。在C语言中的文件格式化读写函数:fprintf和fscanf中我们介绍了fscanf函数,并给出了示例程序,本文也将在该程序的基础上进行解说。

在示例程序中,我们定义了一个结构体类型student,用于保存学生的信息(学号、姓名和三门课的成绩),写入到文件中就是下面这个样子:

1 letuknowit 89.000000 87.000000 88.000000

每一部分都由空白隔开,因此我们用fscanf()函数就可以分别读入到student结构体的各个成员中了,按理说这个就不会有问题了,但是总会有意外发生,如果学生的名字中出现了空格就不好办了,例如变成下面的样子:

1 letuknowitblog 89.000000 87.000000 88.000000

这个时候再按照我们以前的读取方式就会出现问题了,你会发现读取到的学生成绩全部都出错了,出错的原因就是letuknowit和blog之间的那个空格。那这个问题到底该怎么解决呢?请看下面的代码:

C语言: 知蚁博客

#include “stdio.h”

struct student

{

char    chName[20];    //姓名

int    nID;        //学号

float    fScores[3];    //3门课的成绩

};

void main()

{

FILE *pRead;

struct student tStu;

pRead=fopen(“stu_scores.txt”,“r”);

if(NULL == pRead)

{

return;

}

//从文件中读取数据(主要下面参数中的&)

fscanf(pRead,“%d %[^0-9] %f %f %f\n“,&tStu.nID,tStu.chName,&tStu.fScores[0],&tStu.fScores[1],&tStu.fScores[2]);

fclose(pRead);

//打印读取的数据到屏幕上

printf(“%d %s %.1f %.1f %.1f\n“,tStu.nID,tStu.chName,tStu.fScores[0],tStu.fScores[1],tStu.fScores[2]);

}

对比前面文章的代码,会发现原先的%s变为了%[^0-9] ,只需要改动这一点点就可以了,下面知蚁就说说为什么要这样修改。那就得说说fscanf函数的格式字符串了。

[] 读取数据但只允许括号内的字符。如[0-9]只允许读入0-9的数字。

[^] 读取数据但不允许中括号中的^符号后的字符出现,如[^0-9]表示不允许读入0-9的数字.

因此我们上面读入学生名的时候就会一直读取(空格照样读取),直到遇到数字后停止,因此就可以正确的读取名字为letuknowit blog了,后面读取成绩也就正确了。

看到这里大家就会发现一个问题了,名字中不可以包含数字,否则还是会出错,这个时候就只能考虑把名字部分放到最后来读取了,调整为如下形式:

1 89.000000 87.000000 88.000000 letuknowit blog

然后修改参数为”%d %[^\n] %f %f %f\n”来读取了。知蚁建议还是不要采用fscanf来读取来空格的字符串,可以用fgets函数来代替。

原创文章请注明转载于知蚁博客,本文地址:http://www.letuknowit.com/archives/100

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Matlabfscanf函数可以用来取字符串。具体方法如下: 1. 打开文件:使用fopen函数打开要取的文件。 2. 取字符串:使用fscanf函数取文件的字符串。可以使用%s格式说明符来取字符串。 3. 关闭文件:使用fclose函数关闭文件。 示例代码如下: fid = fopen('filename.txt', 'r'); str = fscanf(fid, '%s'); fclose(fid); 其,filename.txt是要取的文件名,r表示以只方式打开文件。取到的字符串存储在str变量。最后使用fclose函数关闭文件。 注意:如果文件有多行字符串,可以使用循环来取每一行字符串。 ### 回答2: 在MATLABfscanf函数是一种用于取文件或从字符串取格式化数据的函数。它的语法如下: A = fscanf(fileID,format) 其,fileID是一个文件标识符,可以是文件名、路径或文件对象;format是取的格式说明符,例如:%d表示整数,%f表示浮点数,%s表示字符串等等。 在使用fscanf函数时,如果想要取文本字符串,只需要在format使用%s即可。例如,如果有一个文本文件名为test.txt,其包含一行字符串"Hello World!",我们可以使用以下代码取该文件: fileID = fopen('test.txt','r'); A = fscanf(fileID,'%s'); fclose(fileID); 这里,我们首先使用fopen函数打开test.txt文件并获取其文件标识符,然后使用fscanf函数取该文件的内容,并将其存储在变量A。最后,我们使用fclose函数关闭该文件。 需要注意的是,当取字符串时,fscanf函数只会取到空格、制表符或换行符等停止字符为止,因此如果想要取整个字符串,需要保证字符串不包含这些字符。此外,如果要取多个字符串,可以在format指定多个%s,分别对应多个字符串变量。 ### 回答3: MATLAB fscanf函数是一种常用的取文件格式化数据的函数,它可以取文本文件的字符串等数据。在MATLAB取字符串可以通过使用%f参数来完成。 首先,我们需要打开一个文件,可以使用fopen函数打开文件,如下所示: fid = fopen('filename.txt','r'); 其,'filename.txt'表示要取的文件路径和文件名,'r'表示取模式。如果文件不存在或无法打开,fid将返回值-1。 然后,我们可以使用fscanf函数取文件的字符串数据,如下所示: s = fscanf(fid,'%s'); 其,fid是文件标识符,'%s'表示取字符串数据。 取完字符串后,我们需要关闭文件,可以使用fclose函数来关闭文件: fclose(fid); 完整的MATLAB代码如下所示: fid = fopen('filename.txt','r'); s = fscanf(fid,'%s'); fclose(fid); 需要注意,如果要取多行字符串,可以在参数添加\n来取,如下所示: fid = fopen('filename.txt','r'); s = fscanf(fid,'%s\n'); fclose(fid); 此时,取到的字符串s将包含文件的所有字符串,并且每行字符串末尾会有一个换行符(\n)。 在使用MATLAB fscanf函数时,需要特别注意数据类型的匹配。如果取到的数据与定义的格式不匹配,就会导致程序出错。因此,在取文件时需要仔细检查数据格式,并保持数据格式的一致性,以确保正确地取数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值