我试图使用sscanf将令牌转换为浮点数。代码编译并运行,但只要我输入一个值,我就得到0.0000。由于某种原因,它没有正确转换。
以下是代码:
while(1)
{
printf("repl> ");
char *storage [30];
char *tok;
char g;
double my_double;
char buffer[20];
int pos = 0, i;
fgets(buffer,sizeof(buffer),stdin);
tok = strtok(buffer," ");
while (tok != NULL)
{
if (strcmp(tok, "add") == 0) printf("YES!!");
else if (strcmp(tok, "add\n") == 0) printf("YELZZ!!!");
if (strcmp(tok, "quit") == 0) exit(1);
else if (strcmp(tok, "quit\n") == 0) exit(1);
if (sscanf(tok, "%f", my_double) > 0)
{
Push(NULL, my_double, &head);
}
else
Push(strdup(tok), 0, &head);
tok = strtok(NULL," ");
}
Display(&head);
答案 0 :(得分:2)
尝试将指向数字的指针传递给sscanf,而不是数字本身:
sscanf(tok, "%lf", &my_double);
sscanf
函数需要知道存储结果的位置,因此传入my_double的副本将不起作用。
此外,正如Abhay所指出的,如果您正在阅读双重内容,则需要指定"%lf%
作为格式字符串。
答案 1 :(得分:2)
由于变量my_double
的类型为double
,因此您必须使用%lf
而不是%f
。你也错过了&
(正如克里斯正确指出的那样)
if (sscanf(tok, "%lf", &my_double) > 0)