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

												

最新文章

  1. C++ &quot;+=&quot;等运算符使用bug
  2. Web报表工具JS开发之日期校验
  3. PO3281 Dining(最大流)
  4. ListView(3)关于listview滚动事件,何时滚动到顶部或底部
  5. SharePoint咨询师之路:设计之前的那些事四:负载均衡 - web服务器
  6. MFC之树控件
  7. Mac, Linux中配置Latex中文字体
  8. 文字滚动效果,jquery和marquee标签
  9. HTML DOM对象的属性和方法
  10. Git综合使用命令行和gui工具小结
  11. 【MySQL】初识数据库及简单操作
  12. NodeJS多进程
  13. logstash 5.1.1 学习
  14. 『流畅的Python』第10章笔记_序列类型
  15. mysql数据出现Unknown column &#39;user_uid&#39; in &#39;field list&#39; sql错误
  16. Android学习笔记PreferenceFragment的使用
  17. Java 从静态代理到动态代理
  18. The Concept of a Process
  19. 5.4 使用 Razor 表达式
  20. 【Reporting Services 报表开发】— 总结

热门文章

  1. 第十三篇Django Logging配置样例
  2. Apache使用mod_jk/mod_proxy模块实现代理、负载均衡的配置
  3. P 1033 旧键盘打字
  4. Linux终端命令行的常用快捷键
  5. HZNU-ACM寒假集训Day6小结 线性DP
  6. 干货|浅谈iOS端短视频SDK技术实现
  7. linux_c_udp_example
  8. LeetCode做题笔记之动态规划
  9. Vue 项目de一些准备工作
  10. redis(六)---- 简单延迟队列