初学C语言之格式化输出+解析XML函数

本文介绍了C语言中的格式化输出,包括不同类型的格式说明符、对齐方式和精度控制,并提供了printf和sprintf的使用示例。此外,还讲解了如何解析XML字符串,通过示例展示了从XML中提取数据并存储到结构体中的方法。
摘要由CSDN通过智能技术生成

一. 格式化输出

格式说明符的形式说明如下:
%[flags][width][.prec] type

  1. 类型符 type
    表示输出数据的类型
  2. 宽度符 width

%12s 是输出12位的字符串,不足补空格

  1. 对齐符 flags
    +是右对齐, 默认缺省值
    -是左对齐, %-12lf是指输出左对齐的12位浮点数, 不足12位,则空格补齐

  2. 精度符 prec
    适用于浮点数的输出, 小数部分的位数,四舍五入
    %12.2lf 输出小数位2位, 总长度为12位的浮点数

二.格式化输出到字符串

printf 是把结果输出到屏幕
sprintf 是把结果输出的内容保存字符串str中
snprintf 是把结果的前n-1个字符内容保存到字符串str中,不是n个

#include <string.h>
#include <stdio.h>
#include <stdlib.h>


void main(){
    char str[301];

    memset(str, 0, sizeof(str));
    sprintf(str, "%d, %c, %lf, %s\n",10, 'c',25.99, "一个输入了这几个内容");

    printf("%s", str);

    memset(str, 0, sizeof(str));

    snprintf(str, 10, "==%d,%c,%lf,%s\n==",10, 'c',25.99, "一个输入了这几个内容");
    printf("%s", str);

}

三. 解析xml函数

可以加入至库函数, 以下经编译运行OK

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
// 解析xml的函数
int GetXMLBuffer(const char *in_XMLBuffer, const char *in_FidldName, char *out_Value);
struct st_girl {
    char name[51];
    int age;
    int weight;
};

// 将XML内容解析到结构体中
void GetXMLValue(const char *in_XMLBuffer, struct st_girl *pst);

void main(){
    char strXMLBuffer[301];
    struct st_girl stgirl;

    memset(strXMLBuffer, 0, sizeof(strXMLBuffer));
    strcpy(strXMLBuffer, "<name>张三</name><age>18</age>");
    GetXMLValue(strXMLBuffer, &stgirl);
    printf("=%s=%d=%d=\n", stgirl.name, stgirl.age, stgirl.weight);
}
// 这个函数可以加入库函数:
int GetXMLBuffer(const char *in_XMLBuffer, const char *in_FieldName, char *out_Value){
    char sfieldname[51], efieldname[51];

    memset(sfieldname, 0, sizeof(sfieldname));
    memset(efieldname, 0, sizeof(efieldname));

    sprintf(sfieldname, "<%s>", in_FieldName);
    sprintf(efieldname, "</%s>", in_FieldName);

    char *start, *end;
    start=end=0;

    start=strstr(in_XMLBuffer, sfieldname);
    end=strstr(in_XMLBuffer, efieldname);
    if ((start==0) ||(end==0)) return -1;
    memset(out_Value, 0, sizeof(out_Value));
    strncpy(out_Value, start+strlen(sfieldname), end-start-strlen(sfieldname));
    return 1;
}

// 获取xml的值
void GetXMLValue(const char *in_XMLBuffer, struct st_girl *pst){
    memset(pst, 0, sizeof(struct st_girl));

    GetXMLBuffer(in_XMLBuffer, "name", pst->name);

    char str[12];
    memset(str, 0, sizeof(str));
    GetXMLBuffer(in_XMLBuffer, "age", str);
    pst->age=atoi(str);

    memset(str, 0, sizeof(str));
    GetXMLBuffer(in_XMLBuffer, "weight", str);
    pst->weight=atoi(str);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值