fscanf用于读取字符串数据流,遇到空白字符(空格' '; 制表符'\t'; 新行符'\n')就停止,若要读取完整的一行数据,可以使用格式控制("%[^\n]%*c"),或者使用行读取函数(getline)。
格式控制说明:%[ ]表示读取指定字符集的文本,例如%[0-9]表示仅读取数字,遇到非数字字符就停止;%[a-zA-Z]表示读取字符,遇到非字母字符就停止)。第一个字符是'^',表示反向读取,读取指定字符集以外的文本,遇到指定字符集就停止。*表示忽略读取的字符,就是说读取指定的字符但不保存到变量中。
%[^\n]表示读取'\n'之外的所有字符;之后的%*c表示忽略读取的'\n',就是说读取'\n'但不保存。
%*[^\n]%*c表示跳过一行。

fscanf(fp,"%[^,],%s",buf,buf2);
/*
* 注意:file.txt文件中元素属性的格式为:
* 符号(西文逗号)名称(空格)原子序数(西文逗号)密度(西文逗号)熔点(西文逗号)沸点(西文逗号)比热容(西文逗号)比焓(西文逗号)热导率(西文逗号)线胀系数(西文逗号)电阻率(西文逗号)
* 例子:
* Cu,铜 29,8.96,1087,2580,0.385,211.86,393.56,17.0,1.675
*/ #include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAX 4 typedef struct //定义元素结构体 elements
{
char sym[]; //符号
char name[]; //名称
int atomic; //原子序数
float den; //密度
float mel; //熔点
int boil; //沸点
float shc; //比热容 Specific heat capacity
float se; //比焓 Specific enthalpy
float tc; //热导率 Thermal conductivity
float cle; //线胀系数 Coefficient of linear expansion
float res; //电阻率 Resistivity
}elements; int main()
{
FILE *fp;
elements elem[MAX];
int i,k;
int ret=;
char symbol[];
char name[];
if((fp = fopen("E:\\file.txt","rb")) == NULL)
return -;
memset(elem,,sizeof(elements)*MAX); //初始化结构体数组,全部填0
for(i=;i<MAX;i++)
fscanf(fp,"%[^,],%s %d,%f,%f,%d,%f,%f,%f,%f,%f\r\n",elem[i].sym,elem[i].name,&(elem[i].atomic),&(elem[i].den),&(elem[i].mel),&(elem[i].boil),&(elem[i].shc),&(elem[i].se),&(elem[i].tc),&(elem[i].cle),&(elem[i].res));
while()
{
printf("====> [菜单] \n[输入数字1].符号查询\n[输入数字2].名称查询\n其他输入则退出程序\n");
scanf("%d",&k);
if(==k) //按照符号查询
{
scanf("%s",symbol);
for(i=;i<MAX;i++) //遍历
{
if(strcmp(symbol,elem[i].sym)==) //如果找到
{
break;
}
}
if(i!=MAX) //如果找到则输出
{
printf("符号:%s\n名称:%s\n原子序数:%d\n密度:%.4f\n熔点:%.1f\n沸点:%d\n比热容:%.3f\n热焓:%.2f\n热导率:%.2f\n线胀系数:%.2f\n电阻率:%.3f\n",elem[i].sym,elem[i].name,elem[i].atomic,elem[i].den,elem[i].mel,elem[i].boil,elem[i].shc,elem[i].se,elem[i].tc,elem[i].cle,elem[i].res);
}
else
printf("未找到%s这个元素!\n",symbol); }
else if(==k) //按照名称查询
{
scanf("%s",name);
for(i=;i<MAX;i++) //遍历
{
if(strcmp(name,elem[i].name)==) //如果找到
{
break;
}
}
if(i!=MAX) //如果找到则输出
{ printf("符号:%s\n名称:%s\n原子序数:%d\n密度:%.4f\n熔点:%.1f\n沸点:%d\n比热容:%.3f\n热焓:%.2f\n热导率:%.2f\n线胀系数:%.2f\n电阻率:%.3f\n",elem[i].sym,elem[i].name,elem[i].atomic,elem[i].den,elem[i].mel,elem[i].boil,elem[i].shc,elem[i].se,elem[i].tc,elem[i].cle,elem[i].res);
}
else
printf("未找到%s这个元素!\n",name);
}
else
return ;
} return ;
}

E:\file.txt 内容:

Ag,银 47,10.49,960.8,2210,0.234,104.67,418.7,19.7,1.59
Cu,铜 29,8.96,1087,2580,0.385,211.86,393.56,17.0,1.675
Al,铝 13,2.6984,660.1,2500,0.900,369.09,221.9,23.6,2.655

												

fscanf的用法的更多相关文章

  1. sprintf()、fprintf()、fscanf()的用法

    sprintf函数的用法1.该函数包含在stdio.h的头文件中. 2.sprintf和平时我们常用的printf函数的功能很相似.sprintf函数打印到字符串中,而printf函数打印输出到屏幕上 ...

  2. [参考]C的scanf 和 C++的fscanf 的用法

    说明:本文不适合新手学习,适合用来做参考.本文参考有其他博客的内容,不过年代久远已经忘记了,在此感谢各位博主! scanf函数 用 法:int scanf(char *format[,argument ...

  3. matlab fscanf用法

    matlab fscanf用法 matlab中的fscanf的用法如下: A=fscanf(fid,format)[A, count]=fscanf(fid,format,size) [A, coun ...

  4. fscanf函数的用法

    fscanf函数用法 简要介绍 fscanf()函数是格式化读写函数.它读取的对象是磁盘文件 函数原型: int fscanf(FILE * fp,char * format,...); 其中fp为文 ...

  5. matlab操作(整理)

    http://blog.csdn.net/ysuncn/article/details/1741828 http://zhan.renren.com/h5/entry/3602888498000464 ...

  6. 函数fgets和fputs、fread和fwrite、fscanf和fprintf用法小结 (转)

    函数fgets和fputs.fread和fwrite.fscanf和fprintf用法小结 字符串读写函数fgets和fputs 一.读字符串函数fgets函数的功能是从指定的文件中读一个字符串到字符 ...

  7. fscanf()函数基本用法

    FILE *fp; while(!feof(fp)) { fscanf(fp,"%s%d%lf",a,&b,&c);//这里%s对应的a不需要加上取地址符号& ...

  8. C++之函数fgetc和fputc、fgets和fputs、fread和fwrite、fscanf和fprintf用法小结

    #include <iostream> #include <cstdio> #include <cstdlib> using namespace std; int ...

  9. fscanf和fgets用法

    首先要对fscanf和fgets这两个文件函数的概念有深入的了解,对于字符串输入而言这两个函数有一个典型的区别是: fscanf读到空格或者回车时会把空格或回车转化为/(字符串结束符)而fgets函数 ...

随机推荐

  1. ACM-单词接龙

    题目描述:单词接龙 问题描述:单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们己知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙" 中出现 ...

  2. 日期月份是英文转成数字——oracle

    update table01 set F_DATE = to_char(to_date(F_DATE, 'dd-month-yy', 'NLS_DATE_LANGUAGE=AMERICAN'), 'y ...

  3. JAXB工具

    在JDK6之后,都自带了JAXB工具,所以在jdk类库与tomcat WEBAPP类库之间,会造成冲突 https://blog.csdn.net/iteye_13776/article/detail ...

  4. 面向对象第一个特征-封装(Encapsulation)

    面向对象第一个特征-封装(Encapsulation) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.封装概述(Encapsulation) 1>.什么是封装 是指隐藏对 ...

  5. P1013 数素数

    转跳点:

  6. Java连载69-接受输入、用数组模拟栈

    一.编写一个酒店管理系统 1.直接上代码 package com.bjpowernode.java_learning; ​ public class D69_1_ { //编写一个程序模拟酒店的管理系 ...

  7. React + umi +antd+antv/g6 实现力图

    官方示例效果:http://antv.alipay.com/zh-cn/g6/2.x/demo/net/2017-link-data.html 改编效果: 实现步骤: 环境:nodejs.yarn/n ...

  8. MVC学生管理系统-阶段II(添加学生信息)

    项目源码 :https://download.csdn.net/download/weixin_44718300/11091042 前期准备,主体框架,学生列表显示    请看上一篇文章 本文是对阶段 ...

  9. 学术Essay写作中Introduction的正确打开方式

    其实在学术essay写作过程中,很多留学生经常不知道如何写introduction,所以有些开头的模板句就出现了,比如,With the development of society/With the ...

  10. 吴裕雄--天生自然JAVA SPRING框架开发学习笔记:Java Spring的特点和优点

    Spring 是另一个主流的 Java Web 开发框架,该框架是一个轻量级的应用框架,具有很高的凝聚力和吸引力. Spring 是分层的 Java SE/EE full-stack 轻量级开源框架, ...