l******0 发帖数: 313 | 1 【 以下文字转载自 Programming 讨论区 】
发信人: love1010 (学会move on), 信区: Programming
标 题: C的fscanf的问题
发信站: BBS 未名空间站 (Sat Aug 18 00:31:27 2012, 美东)
需要从一个文件里读数据写入一些变量里
文件是这样的格式 GOOG|588.88
需要将GOOG写入一个string里,然后将588.88写入一个float number里,我写了以下
code:
char tempprice[10];
char ticker[10];
fscanf(fr,"%[^|]|%[^\n]\n",ticker,tempprice);
float stockprice = stof(tempprice); //将string变成float
上面的code, ticker会正确得到GOOG,但是tempprice却无法得到588.88,请问哪里出
错了?
另外,有更优化的方法么
非常感谢 | A**l 发帖数: 2650 | 2 A sequence of white-space characters (space, tab, newline, etc.; see isspace
(3)). This directive matches any amount of white space, including none, in
the input.
I have no idea what "[^\n]" exactly means... But you can use %s for sure.
【在 l******0 的大作中提到】 : 【 以下文字转载自 Programming 讨论区 】 : 发信人: love1010 (学会move on), 信区: Programming : 标 题: C的fscanf的问题 : 发信站: BBS 未名空间站 (Sat Aug 18 00:31:27 2012, 美东) : 需要从一个文件里读数据写入一些变量里 : 文件是这样的格式 GOOG|588.88 : 需要将GOOG写入一个string里,然后将588.88写入一个float number里,我写了以下 : code: : char tempprice[10]; : char ticker[10];
| c****p 发帖数: 6474 | 3 "%s|%f", ticker, price?
【在 l******0 的大作中提到】 : 【 以下文字转载自 Programming 讨论区 】 : 发信人: love1010 (学会move on), 信区: Programming : 标 题: C的fscanf的问题 : 发信站: BBS 未名空间站 (Sat Aug 18 00:31:27 2012, 美东) : 需要从一个文件里读数据写入一些变量里 : 文件是这样的格式 GOOG|588.88 : 需要将GOOG写入一个string里,然后将588.88写入一个float number里,我写了以下 : code: : char tempprice[10]; : char ticker[10];
| l****c 发帖数: 838 | 4 You should read in the string and parse.
You don't know how long the first part string is or how long the number is.
So if you define:
char tempprice[10];
char ticker[10];
You have the risk of buffer overflow.
Here is my solution. I debug it as I wrote it, so it is not optimized.
it is pure C. You can get result with 2 lines of perl or python code
============================
#include
#include
#include
int main()
{
char *str = "GOOD|89.34";
char *ptoken, *ph;
char *pstr, *buffer;
int diff;
int n, numlen;
double num;
ph = str;
ptoken = strstr(str, "|");
diff = ptoken-ph;
printf("pnum=%s, diff =%d\n",ptoken, diff);
pstr = malloc(diff*sizeof(char));
memcpy(pstr, str, diff);
n = strlen(str);
numlen = (n-diff-1);
printf("n=%d, numlen=%d\n", n, numlen);
buffer = malloc(sizeof(char)*numlen);
strncpy(buffer,ptoken+1, numlen);
printf("buffer=%s\n", buffer);
num = atof(buffer);
printf("pstr=%s\n", pstr);
printf("num=%f\n", num);
free(buffer);
free(pstr);
return 0;
}
=========================================
【在 l******0 的大作中提到】 : 【 以下文字转载自 Programming 讨论区 】 : 发信人: love1010 (学会move on), 信区: Programming : 标 题: C的fscanf的问题 : 发信站: BBS 未名空间站 (Sat Aug 18 00:31:27 2012, 美东) : 需要从一个文件里读数据写入一些变量里 : 文件是这样的格式 GOOG|588.88 : 需要将GOOG写入一个string里,然后将588.88写入一个float number里,我写了以下 : code: : char tempprice[10]; : char ticker[10];
|
|