免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3209 | 回复: 9
打印 上一主题 下一主题

[函数] 求助(用(fscanf())函数实现流输入问题!!! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-03-28 11:55 |只看该作者 |倒序浏览
程序如下;

   ....
   float gzfse;
  open (fp)
   fscanf(fp,"%f",gzfse);
  其中fp为文本流“aaaa|bbbb|123.31"希望gzfse为123.31
   如何写format参数?
  谢谢!!!!

论坛徽章:
0
2 [报告]
发表于 2003-03-28 14:39 |只看该作者

求助(用(fscanf())函数实现流输入问题!!!

一个类似的比较有局限性的例子,
更安全的做法可能是用regex吧。


  1. #include <stdio.h>;

  2. int
  3. main()
  4. {
  5.         unsigned char        *source = "aaaa|bbbb|123.31";
  6.         float        digit = 0.0;

  7.         sscanf(source, "%*[^1-9]%f", &digit);
  8.         printf("digit = %f\n", digit);
  9.         return(0);
  10. }
复制代码

论坛徽章:
0
3 [报告]
发表于 2003-03-28 15:10 |只看该作者

求助(用(fscanf())函数实现流输入问题!!!

我的输入是一个文本流,每行为:5678949|张三|123.45
将5678949,张三,123.45 分别赋值给数据库的一个字段
循环若干次;

论坛徽章:
0
4 [报告]
发表于 2003-03-28 15:43 |只看该作者

求助(用(fscanf())函数实现流输入问题!!!

这是一次操作,读一行,
只从一个字串中读取这三部分,
自己加循环和前后处理就行了。
注意各个分量的大小长度,
小心别dump了。

printf的时候可以用"%3.2f",可是在scanf的时候就不好用了。
正在调查……


  1. #include <stdio.h>;

  2. int
  3. main()
  4. {
  5.         unsigned char        *source = "21343|bbbb|123.31\n";
  6.         unsigned char        id[10] = {0};
  7.         unsigned char        name[10] = {0};
  8.         float        digit = 0.0;

  9.         sscanf(source, "%[0-9]|%[^|]|%f\n", id, name, &digit);
  10.         printf("id = %s\n", id);
  11.         printf("name = %s\n", name);
  12.         printf("digit = %f\n", digit);
  13.         return(0);
  14. }
复制代码

论坛徽章:
0
5 [报告]
发表于 2003-03-28 15:45 |只看该作者

求助(用(fscanf())函数实现流输入问题!!!

最后那个一定要用实型吗?
精度好像有问题,你试试。

论坛徽章:
0
6 [报告]
发表于 2003-03-28 16:31 |只看该作者

求助(用(fscanf())函数实现流输入问题!!!

在fscanf()中format设置float变量时,小数点后保持两位如何处理?
例如:
   fscanf(fp,format,&amp;dffse)
其中dffse需保持小数点后两位,format如何写?
非常感谢!!!

论坛徽章:
0
7 [报告]
发表于 2003-03-28 17:44 |只看该作者

求助(用(fscanf())函数实现流输入问题!!!

费了半天劲,
用double声明就OK了。
不会出现精度问题,
输出限定2位就好了。
printf(".......%3.2lf.......";

论坛徽章:
0
8 [报告]
发表于 2003-03-29 23:00 |只看该作者

求助(用(fscanf())函数实现流输入问题!!!

一定要用fscanf?
你可以用fgets然后在再用strchr定位呀。不过有点土:)
FILE *fp;
char *p;
int len;
char tmpmsg[256];
double amt;
char msg[256];
...

fp=fopen(filename,"w";
memset(msg,0x00,sizeof(msg));
fgets(msg,80,fp);
p=strchr(msg,'|');
p++;
p=strchr(p,'|');
memset(tmpmsg,0x00,sizeof(tmpmsg));
//len=strlen(msg)-(p+1-&amp;msg);
//memcpy(tmpmsg,p+1,len);
strcpy(tmpmsg,p+1);
amt=atof(tmpmsg)l

论坛徽章:
0
9 [报告]
发表于 2003-03-29 23:01 |只看该作者

求助(用(fscanf())函数实现流输入问题!!!

sorry
是fopen(filename,"r";

论坛徽章:
0
10 [报告]
发表于 2003-04-01 01:01 |只看该作者

求助(用(fscanf())函数实现流输入问题!!!

原帖由 "zjxswitch" 发表:
在fscanf()中format设置float变量时,小数点后保持两位如何处理?
例如:
   fscanf(fp,format,&amp;dffse)
其中dffse需保持小数点后两位,format如何写?
非常感谢!!!


搞定了吗?
怎么没消息了?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP