我试图从包含一行数据格式的文件中读取,如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没有。谁能帮助我呢?
有没有更好的代码?感谢。
答案 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...