c语言系统函数c博客,fscanf()函数用C语言读取空间的解决方案

eea9bc66d2920e0e5057744a006916ad.png

fscanf()函数是C语言的文件格式读取功能. 它使用空格,制表符和回车符来分隔不同的单词,使用起来更方便. 在C语言文件格式的读写功能中: fprintf和fscanf我们介绍fscanf函数并给出示例程序,本文还将在此程序的基础上进行解释.

在示例程序中,我们定义了一个学生的结构类型,用于保存学生的信息(三门课程的学生人数,姓名和成绩),并将其写入文件,如下所示:

1个letuknowit 89.000000 87.000000 88.000000

每个部分都由空白隔开,因此我们可以使用fscanf()函数分别读取学生结构的每个成员. 毫无疑问,这是没有问题的,但是总会有事故发生. 如果学生姓名中有空格,则将很困难,例如,它看起来像这样:

1个letuknowit博客89.000000 87.000000 88.000000

这时,根据我们以前的阅读方法,将出现问题. 您会发现所有读取的学生成绩都是错误的. 错误的原因是letuknowit和博客之间的空间. 那么如何解决这个问题呢?看下面的代码:

C语言: 蚂蚁博客

840cdf7096f7c0f169e115c2a4814d7a.png

#include“ stdio.h”

结构学生

{

char chName [20]; //名称

int nID; //学生编号

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

};

void main()

{

FILE * pRead;

构造学生tStu;

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

如果(NULL == pRead)

{

返回;

}

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

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之间的数字.

[^]读取数据c语言fscanf返回-1,但不允许括号中的^符号后面的字符,例如[^ 0-9]表示不允许读取0-9的数字.

因此,当我们读入上面的学生姓名时c语言fscanf返回-1,我们将一路阅读(空格仍会读),并在遇到数字后停下来,这样我们就可以正确阅读letuknowit博客名称,并在以后阅读成绩.

每个人都在这里看到问题. 名称中不能包含数字,否则仍会发生错误. 目前,您只能考虑将名称部分放在末尾才能阅读. 将其调整为以下形式:

p>

1 89.000000 87.000000 88.000000 letuknowit博客

然后将参数修改为“%d%[^ \ n]%f%f%f \ n”以进行读取. 蚂蚁建议fscanf不应用于读取空格字符串. 可以使用Fgets函数.

请指出原始文章已在Zhizhi Blog(本文地址)上转载:

本文来自电脑杂谈,转载请注明本文网址:

http://www.pc-fly.com/a/jisuanjixue/article-151585-1.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值