fscanf的用法
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的用法的更多相关文章
- sprintf()、fprintf()、fscanf()的用法
sprintf函数的用法1.该函数包含在stdio.h的头文件中. 2.sprintf和平时我们常用的printf函数的功能很相似.sprintf函数打印到字符串中,而printf函数打印输出到屏幕上 ...
- [参考]C的scanf 和 C++的fscanf 的用法
说明:本文不适合新手学习,适合用来做参考.本文参考有其他博客的内容,不过年代久远已经忘记了,在此感谢各位博主! scanf函数 用 法:int scanf(char *format[,argument ...
- matlab fscanf用法
matlab fscanf用法 matlab中的fscanf的用法如下: A=fscanf(fid,format)[A, count]=fscanf(fid,format,size) [A, coun ...
- fscanf函数的用法
fscanf函数用法 简要介绍 fscanf()函数是格式化读写函数.它读取的对象是磁盘文件 函数原型: int fscanf(FILE * fp,char * format,...); 其中fp为文 ...
- matlab操作(整理)
http://blog.csdn.net/ysuncn/article/details/1741828 http://zhan.renren.com/h5/entry/3602888498000464 ...
- 函数fgets和fputs、fread和fwrite、fscanf和fprintf用法小结 (转)
函数fgets和fputs.fread和fwrite.fscanf和fprintf用法小结 字符串读写函数fgets和fputs 一.读字符串函数fgets函数的功能是从指定的文件中读一个字符串到字符 ...
- fscanf()函数基本用法
FILE *fp; while(!feof(fp)) { fscanf(fp,"%s%d%lf",a,&b,&c);//这里%s对应的a不需要加上取地址符号& ...
- C++之函数fgetc和fputc、fgets和fputs、fread和fwrite、fscanf和fprintf用法小结
#include <iostream> #include <cstdio> #include <cstdlib> using namespace std; int ...
- fscanf和fgets用法
首先要对fscanf和fgets这两个文件函数的概念有深入的了解,对于字符串输入而言这两个函数有一个典型的区别是: fscanf读到空格或者回车时会把空格或回车转化为/(字符串结束符)而fgets函数 ...
随机推荐
- Spring 事件(1)- 内置事件
Spring 系列教程 Spring 框架介绍 Spring 框架模块 Spring开发环境搭建(Eclipse) 创建一个简单的Spring应用 Spring 控制反转容器(Inversion of ...
- composer install、require、update的区别
- 正则表达式入门(ed模糊匹配)
元字符: /b 代表着单词的开头或结尾,也就是单词的分界处.如果要精确地查找hi这个单词的话,我们应该使用/bhi/b. .是另一个元字符,匹配除了换行符以外的任意字符,*同样是元字符,它指定*前边的 ...
- 使用packstack安装pike版本的openstack
最近由于工作需要,需要调研安装pike版本的gnocchi.由于ceilometer与gnocchi版本的强相关性,所以需要部署一个同一版本的openstack环境,在同事的推荐下使用了packsta ...
- 使用Redis SortedSet实现增量更新
导读:前段时间有个需求是提供一个接口供客户端增量更新数据,当有数据被删除了以后客户端也需要感知到,并且要支持一定并发: 关键词:高并发,增量更新 前言 何谓增量更新,顾名思义就是只更新变化的部分,这样 ...
- 三十一、CI框架之使用验证码
一.CI的验证码功能用着很是舒服,需要在根目录下新建一个captcha的验证码文件夹用于存放生产的图片,代码如下: 二.浏览器效果如下: 总结:关于验证码生产函数,有很多参数可以设置,包括字体,验证码 ...
- Element.scrollIntoView() 和 document.elementFromPoint ()
Element.scrollIntoView() 让当前的元素滚动到浏览器窗口的可视区域内 element.scrollIntoView(); // 等同于element.scrollIntoV ...
- OO第三单元“技术”博客
主要针对第三单元的三次作业 JML语言的理论基础.应用工具链情况 JML指的是Java建模语言,全称是Java modeling language,是一种行为接口规范语言,可用于指定Java模块的行为 ...
- POJ 1469:COURSES
COURSES Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 19458 Accepted: 7658 Descript ...
- JSP变量、方法和类的声明,JSP程序片,JSP表达式
参考文章 http://c.biancheng.net/view/1431.html http://c.biancheng.net/view/1433.html http://c.biancheng. ...