用C中的fscanf分隔字符串和浮点数

时间:2012-08-18 05:12:20

标签: scanf

我试图从包含一行数据格式的文件中读取,如GOOG | 588.88

我想将GOOG复制到自动收报机,并将588.88复制到浮动股票价格

我编写了以下代码来完成fr是文件指针的工作

char tempprice[10]; 
char ticker[10];
fscanf(fr,"%[^|]|%[^\n]\n",ticker,tempprice);
float stockprice = stof(tempprice); //change string to float

代码适用于股票代码,但不适用于股票价格。换句话说,GOOG成功复制到自动收报机,而588.88没有。谁能帮助我呢?

有没有更好的代码?感谢。

2 个答案:

答案 0 :(得分:1)

我想我只是:

char tempprice[10]; 
char ticker[10];
char tmp_chr = fgetc(fr);
char *tmp_ptr = ticker;
while (tmp_chr != '|')
{
  *tmp_ptr++ = tmp_chr;
  tmp_chr = fgetc(fr);
}
*tmp_ptr = '\0'
tmp_chr = fgetc(fr);
tmp_ptr = tempprice;
while (tmp_chr >= '0' && tmp_chr <= '9' || tmp_chr == '.')
{
  *tmp_ptr++ = tmp_chr;
  tmp_chr = fgetc(fr);
}
float stockprice = stof(tempprice); //change string to float

......但那只是我。 =]这很奇怪,我喜欢正则表达式,但不能忍受scanf机制。还有其他人吗?

答案 1 :(得分:0)

1)我同意user30997:我认为scanf“伪正则表达式”比它的价值更麻烦。 IMHO ...

2)但是,我相信这是您正在寻找的解决方案:

#include <stdio.h>

int
main (int argc, char *argv[])
{
    char str[] = "GOOG|5.88";
    char price[80], ticker[80];
    int iret = sscanf (str, "%[^|]%*[|]%s", price, ticker);
    printf ("iret=%d, price=%s, ticker=%s...\n",
        iret, price,  ticker);
    return 0;
}

输出:iret=2, price=GOOG, ticker=5.88...