• 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



  • 相关阅读:
    php设计模式-适配器
    遍历Map的4种方法
    遍历数组
    遍历List的方法
    复选框选中
    单选框选中
    正向代理和反向代理
    对于Dubbo的理解
    python远程控制Linux
    python对中文的处理
  • 原文地址:https://www.cnblogs.com/qiangua/p/3635400.html
Copyright © 2020-2023  润新知