2013-03-03 4 views
1

3 개의 부동을 읽으려고합니다. 나는 이것을 float과 double로 시도했지만, 둘 다 같은 행동을한다.프로그램에서 너무 많은 십진수를 읽음

입력 예 : 첫 번째 줄에

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 단지 32.0, 54.7-2입니다. 내가 얼마나 많은 소수점을 %.x으로 인쇄 할 지 지정할 수는 있지만 인쇄물에 나와있는만큼 많이 인쇄해야합니다.

또한 while (true) 루프가 있습니다. 왜냐하면 나는 얼마나 많은 숫자를 갖게 될지 모르기 때문입니다.

+1

부동 소수점이 잘못 설계되었습니다. 32.0은 쉽게 31.999999999999999로 갈 수 있습니다. 즉 부동 소수점을 사용하여 입력 한 내용을 정확하게 반환하는 것을 의미합니다 ... – Goz

+2

따라서 문자열 ' – deepmax

+0

'을 "% 2lf"로 변경하려고 시도합니다. – TravellingGeek

답변

6

평범한 부동 소수점 형식에서는 원하는 것을 선택할 수 없습니다.

  • 문자열로 입력을 읽기 : 당신이 입력으로 소수 자릿수 같은 번호의 숫자를 인쇄하려면 , 당신은해야합니다.
  • 자신을 분석하고 소수 자릿수를 저장하십시오.
  • 다시 인쇄 할 때 사용하십시오.
1

scanf("%d",...)을 사용하면 문자를 읽고이를 int으로 구문 분석합니다.

입력 할 때 표시하려면 문자열로 저장해야합니다.

그리고 double으로 사용해야하는 경우 번호로 변환하십시오.