2014-10-29 138 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