0

GOOG|588.88 という 1 行のデータ形式を含むファイルから読み取ろうとしています。

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 は正常にコピーされません。誰でもそれについて私を助けることができますか?

より良いコードはありますか?ありがとう。

4

2 に答える 2

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 メカニズムは我慢できません。他の誰か?

于 2012-08-18T05:20:35.047 に答える
0

1)user30997に同意します:scanf "pseudo-regex"は、価値があるよりも厄介だと思います。私見では...

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...

于 2012-08-18T05:49:56.353 に答える