我正在使用命令行获取输入的3个空格分隔的浮点数。例如"1.234 5.678 9.012"
。从命令行获取阵列输入
我目前正在使用:
float xyz[3] = {0};
scanf("%f", xyz);
print(%f %f %f, xyz[0], xyz[1], xyz[2]);
但是输出为 “1.234000 0.000000 0.000000
”。
预期输出是“1.234000 5.678000 9.012000
”
编辑:我需要使用花车,而不是整数。
我正在使用命令行获取输入的3个空格分隔的浮点数。例如"1.234 5.678 9.012"
。从命令行获取阵列输入
我目前正在使用:
float xyz[3] = {0};
scanf("%f", xyz);
print(%f %f %f, xyz[0], xyz[1], xyz[2]);
但是输出为 “1.234000 0.000000 0.000000
”。
预期输出是“1.234000 5.678000 9.012000
”
编辑:我需要使用花车,而不是整数。
也许这
#include <stdio.h>
int main(int argc, char** argv)
{
float vals[3];
printf("input 3 float values: ");
int res = scanf("%f %f %f", &vals[0], &vals[1], &vals[2]);
if(res == 3)
{
printf("read 3 floats %f %f %f\n", vals[0], vals[1], vals[2]);
} else
{
printf("failed to read 3 float values\n");
}
return 0;
}
正是我需要的。 – 2014-10-29 06:05:52
这一行:if(res> = 0)不能确保读取3个项目。该行应该是:if(res == 3) – user3629249 2014-10-29 16:30:25
如果您使用命令行参数,简单地尝试像
#include<stdio.h>
#include<stdlib.h>
main(int c, char **v)
{
float xyz[3]={0};
xyz[0]=atof(v[1]);
xyz[1]=atof(v[2]);
xyz[2]=atof(v[3]);
printf("%f %f %f\n",xyz[0],xyz[1],xyz[2]);
}
这对于OP表示他们实际上在做什么而言是正确的。 – user3629249 2014-10-29 16:31:24
这应该检查c(通常argc)在继续进行atof呼叫之前是否至少为3,如果其小于3 segfault。 @ user3629249我不同意这更符合OP说他们实际上在做什么,他们说他们使用的是scanf。 – 2014-10-29 20:19:44
什么是你期待? – Roecrew 2014-10-29 05:31:02
@Roecrew查看我的编辑 – 2014-10-29 05:32:54
什么是稀缺?你的意思是scanf? – Roecrew 2014-10-29 05:36:08