关于 sscanf 的错误

fx397993401 2011-10-15 08:25:24
Apple 4.89 626
Banana 3.4 500
Cashew 0.94 310
Durian 0.39 429
Eggfruit 3.43 141
Feijoa 0.66 957
Guarana 0.5 43
Huito 0.63 452
IndianFig 44.16 105
Jackfruit 1.3 1739

这是 我要存入 到一个 字符串中的数据, 字符串 为 c2fbuy ,并且他的内存大于 上面的长度
然后 while 读入数据
while(sscanf("%s %lf %d",str,&p,&q,c2fbuy) == 3) 不能进入
while(sscanf("%s %lf %d",str,&p,&q,c2fbuy) != -1) 中止不了

那么我应该怎么样结束 并且正确的读取Apple 4.89 626 这些数据 ,并且中止呢 ?
...全文
394 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
fx397993401 2011-10-16
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 keiy 的回复:]

用C++,那的确要方便(你在C区的贴,所以我用C写的)
[/Quote]

待会 给你四十分吧 呵呵 谢谢了
孤独小剑 2011-10-15
  • 打赏
  • 举报
回复
while(sscanf("%s %lf %d",str,&p,&q,c2fbuy) == 3) 不能进入
while(sscanf("%s %lf %d",str,&p,&q,c2fbuy) != -1) 中止不了
一、不能进入可能是sscanf一直为0所以无法进入;
二、同样返回值为0不可能等于-1。
孤独小剑 2011-10-15
  • 打赏
  • 举报
回复
专门去百科里核实了一下,楼主参见:
名称:

  sscanf() - 从一个字符串中读进与指定格式相符的数据.
  函数原型:
  int sscanf( const char *, const char *, ...);
  int sscanf(const char *buffer,const char *format[,argument ]...);
  buffer 存储的数据
  format 格式控制字符串
  argument 选择性设定字符串
  sscanf会从buffer里读进数据,依照argument的设定将数据写回。
头文件:

  #include<stdio.h>
返回值:

  成功则返回参数数目,失败则返回-1,错误原因存于errno中。
孤独小剑 2011-10-15
  • 打赏
  • 举报
回复
我咋看着楼主那sscanf函数的参数有点问题呢,sscanf函数原型:
int sscanf(const char *buffer,const char *format[,argument ]...);
但你看楼主传的参数呢?第一个貌似就不对……
楼主核实一下吧。
pdszcxhh 2011-10-15
  • 打赏
  • 举报
回复
学习了
柯本 2011-10-15
  • 打赏
  • 举报
回复
用C++,那的确要方便(你在C区的贴,所以我用C写的)
fx397993401 2011-10-15
  • 打赏
  • 举报
回复
恩谢谢 后来 改用 C++ string 流才弄好的
柯本 2011-10-15
  • 打赏
  • 举报
回复
这个是有问题的.
sscanf不像scanf,它的源不能后移,也就是说你始终只能读到一组数据
且sscanf调用错了
int sscanf(const char *buffer, const char *format[, address, ...]);
源在前面
帮你写了一个程序,看看能否满足你的要求

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char c2fbuy[]="Apple 4.89 626\nBanana 3.4 500\nCashew 0.94 310\nDurian 0.39 429\nEggfruit 3.43 141\n\
Feijoa 0.66 957\nGuarana 0.5 43\nHuito 0.63 452\nIndianFig 44.16 105\nJackfruit 1.3 1739\n";
double p;
int q;
char str[20];
char *sp;
int i=0;

sp = strtok(c2fbuy, " \n");
do {
switch(i)
{
case 0:
strcpy(str,sp);
break;
case 1:
p=atof(sp);
break;
case 2:
q=atoi(sp);
printf("str=%s\tp=%lf\tq=%d\n",str,p,q); //这里输出一组数据
break;
}
i++;
i%=3;
sp=strtok(NULL," \n");
} while (sp!=NULL);

system("pause");
return 0;
}
AnYidan 2011-10-15
  • 打赏
  • 举报
回复
while(sscanf("%lf %d %s",&p,&q,strc2fbuy) == 3)

试试, str 输入时不能有空格
fx397993401 2011-10-15
  • 打赏
  • 举报
回复
这样 有一个情况 老是停留在 读第一行
qq120848369 2011-10-15
  • 打赏
  • 举报
回复
while(sscanf("%s%lf%d",str,&p,&q,c2fbuy) == 3)

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧