2014-10-29 139 views
0

我正在使用命令行获取输入的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

编辑:我需要使用花车,而不是整数。

+0

什么是你期待? – Roecrew 2014-10-29 05:31:02

+0

@Roecrew查看我的编辑 – 2014-10-29 05:32:54

+1

什么是稀缺?你的意思是scanf? – Roecrew 2014-10-29 05:36:08

回答

2

也许这

#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; 
} 
+0

正是我需要的。 – 2014-10-29 06:05:52

+1

这一行:if(res> = 0)不能确保读取3个项目。该行应该是:if(res == 3) – user3629249 2014-10-29 16:30:25

2

如果您使用命令行参数,简单地尝试像

#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]); 

} 
+0

这对于OP表示他们实际上在做什么而言是正确的。 – user3629249 2014-10-29 16:31:24

+0

这应该检查c(通常argc)在继续进行atof呼叫之前是否至少为3,如果其小于3 segfault。 @ user3629249我不同意这更符合OP说他们实际上在做什么,他们说他们使用的是scanf。 – 2014-10-29 20:19:44