zoukankan      html  css  js  c++  java
  • fscanf的用法

    fscanf用于读取字符串数据流,遇到空白字符(空格' '; 制表符' '; 新行符' ')就停止,若要读取完整的一行数据,可以使用格式控制("%[^ ]%*c"),或者使用行读取函数(getline)。
    格式控制说明:%[ ]表示读取指定字符集的文本,例如%[0-9]表示仅读取数字,遇到非数字字符就停止;%[a-zA-Z]表示读取字符,遇到非字母字符就停止)。第一个字符是'^',表示反向读取,读取指定字符集以外的文本,遇到指定字符集就停止。*表示忽略读取的字符,就是说读取指定的字符但不保存到变量中。
    %[^ ]表示读取' '之外的所有字符;之后的%*c表示忽略读取的' ',就是说读取' '但不保存。
    %*[^ ]%*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[3];     //符号
        char name[5];   //名称
        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=0;
        char symbol[3];
        char name[5];
        if((fp = fopen("E:\file.txt","rb")) == NULL)  
            return -1;  
        memset(elem,0,sizeof(elements)*MAX);          //初始化结构体数组,全部填0
        for(i=0;i<MAX;i++)
            fscanf(fp,"%[^,],%s %d,%f,%f,%d,%f,%f,%f,%f,%f
    ",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(1)
        {
            printf("====> [菜单] 
    [输入数字1].符号查询
    [输入数字2].名称查询
    其他输入则退出程序
    ");
            scanf("%d",&k);
            if(1==k)                                                   //按照符号查询
            {
                scanf("%s",symbol);
                for(i=0;i<MAX;i++)                              //遍历
                {
                    if(strcmp(symbol,elem[i].sym)==0)   //如果找到
                    {
                        break;
                    }
                }
                if(i!=MAX)                                         //如果找到则输出
                {
                            printf("符号:%s
    名称:%s
    原子序数:%d
    密度:%.4f
    熔点:%.1f
    沸点:%d
    比热容:%.3f
    热焓:%.2f
    热导率:%.2f
    线胀系数:%.2f
    电阻率:%.3f
    ",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这个元素!
    ",symbol);
    
            }
            else if(2==k)                                            //按照名称查询
            {
                scanf("%s",name);
                for(i=0;i<MAX;i++)                             //遍历
                {
                    if(strcmp(name,elem[i].name)==0)   //如果找到
                    {
                        break;
                    }
                }
                if(i!=MAX)                                         //如果找到则输出
                {
            
                        printf("符号:%s
    名称:%s
    原子序数:%d
    密度:%.4f
    熔点:%.1f
    沸点:%d
    比热容:%.3f
    热焓:%.2f
    热导率:%.2f
    线胀系数:%.2f
    电阻率:%.3f
    ",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这个元素!
    ",name);
            }
            else
                return 0;
        }
    
        return 0;
    }

    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



  • 相关阅读:
    Postman使用教程
    CAD和ArcGIS转换 矢量配准
    SAP CRM Advanced search和Simple search里Max hit表现行为的差异
    SAP CRM Product simple search的启用步骤
    如何快速定位SAP CRM订单应用(Order Application)错误消息抛出的准确位置
    如何动态修改SAP CRM WebClient UI表格栏的宽度
    如何在SAP CRM WebClient UI里创建web service并使用ABAP消费
    如何处理SAP CRM Web Service错误
    如何使用SAP CRM WebClient UI实现一个类似新浪微博的字数统计器
    如何开启SAP CRM基于WORD模板创建附件的功能
  • 原文地址:https://www.cnblogs.com/qiangua/p/3635400.html
Copyright © 2011-2022 走看看