我在使用这部分C代码时遇到了一些麻烦。一切都应该工作得很好,除了函数“strtof”,它返回0.000而不是浮点数。
代码应该做什么: 读一行,例如“一个12” 如果第一个字符是“a”,则使用strtof,它应该设置指向下一个空格的指针,并将两个空格之间的值保存为x ...(可能是错误的)
(包含所有库并定义MAX_LINE。)
感谢您的回答:)。
int run(void) {
char line[MAX_LINE];
fgets(line, sizeof(line), stdin);
char * ptr;
ptr = strtok (line," ");
if (strcmp(ptr, "a") == 0){
{
float x;
x = strtof(line, &ptr); /*HERE*/
printf("%f", x);
}
}
return 0;
}
答案 0 :(得分:2)
你不会在" a"之后读取浮动值,我认为你需要这样做:
ptr = strtok(NULL," ");
x = strtof(ptr, NULL);
strtok
的下一个电话会读取" 12"并且strtof
会将它转换为浮点数到x变量。
答案 1 :(得分:1)
你已经指出了:
代码应该做什么:读一行,例如" 12"如果第一个字符是" a",则使用strtof,它应该设置指向下一个空格的指针并将两个空格之间的值保存到x ...(可能是错误的)
来自glibc manual(strtod和strtof相同):
如果字符串为空,仅包含空格,或不包含具有浮点数的预期语法的初始子字符串,则不执行转换。在这种情况下,strtod返回零值,* tailptr中返回的值是string的值。
答案 2 :(得分:0)
根据float strtof (const char* str, char** endptr); 如果你的第一个字符是' a'那你应该打电话:
x = strtof(line+2,&ptr);
如果line
使用没有偏移量,strtof将解析" 12"并停在' a,您可以检查ptr
值以查看解析停止的位置。