2013-03-03 22 views
1

我正在嘗試讀取3個浮點數。我試圖用浮動和雙打來​​做到這一點,但是我對兩者都有同樣的行爲。程序讀取太多十進制小數點

輸入例:在第一線

3 1 2 
32.0 54.7 -2 

3的整數,浮點數3對下聯:

我如何閱讀:

vector<int> order; 
vector<double> numbers; 
unsigned int order_number; 
double number; 
char input_character; 

while (true) 
{ 
    scanf("%d", &order_number); 
    order.push_back(order_number); 

    scanf("%c", &input_character); 

    if (input_character == ' ') 
    continue; 
    else 
    break; 
} 

while (true) 
{ 
    scanf("%lf", &number); 
    numbers.push_back(number); 

    scanf("%c", &input_character); 

    if (input_character == ' ') 
    continue; 
    else 
    break; 
} 

printf("%d %d %d\n", order[0], order[1], order[2]); 
printf("%lf %lf %lf\n", numbers[0], numbers[1], numbers[2]); 

當打印他們,我得到:

32.000000 54.700000 -2.000000 

我w anted只是32.0,54.7-2。我知道我可以指定用%.x打印多少個小數位數,但是我需要打印與輸入中給定的數量一樣多的數字。

此外,那些while (true)循環,因爲我不知道我會得到多少數字。

+1

浮點設計不準確。 32.0可以很容易地轉到31.999999999999999這意味着返回到你輸入任何類型的浮點不可能... – Goz 2013-03-03 16:21:06

+2

因此,閱讀它們作爲字符串 – deepmax 2013-03-03 16:23:02

+0

嘗試將「%lf」更改爲「%2lf」 – TravellingGeek 2013-03-03 16:26:51

回答

6

你想要的是普通浮點類型不可能實現的。 如果要打印與輸入相同的小數位數,您必須:

  • 將輸入讀取爲字符串。
  • 自己解析並保存小數位數。
  • 當您再次打印時使用它。
1

當您使用scanf("%d",...)時,它會讀取字符並將其解析爲int

如果您希望在輸入時顯示它們,則必須將它們存儲爲字符串。

如果您需要使用它們作爲double然後將它們轉換爲數字。