2010-01-01 3 views
0

플로트 번호에서 숫자를 집계하고 숫자를 유지해야합니다. % f 또는 % c는 scanf를 사용할 수 있지만 % s는 사용할 수 없으며 getchar()을 사용할 수 있습니다. getchar를 사용할 수 있지만 숫자가 잘못되었습니다.플로트 숫자 (hw) C

답변

2

getchar으로 숫자를 잃게되는 이유는 무엇입니까? getchar가와

  1. 읽기 문자는
  2. 그것이 유효한 부동 소수점 값을
  3. 카운트 자리를 확실하게 하나의 문자열
  4. 사용 strtod에 그들 모두를 수집/공백/입력 입력의 끝을 명중 할 때까지 문자열은 필요한 시점 이전이나 이후에 나타납니다.

getchar 제한하는 경우 : getchar

  • 당신이 수가있는 곳의 상태를 유지 하나에 의해

    1. 읽기가 문자 하나를 소수점 전에, 소수점에서, 또는 이후
    2. 숫자가 유효한 부동 소수점 수인 경우 (즉, 1 자리 이상, 그 뒤에 하나 이상의 숫자가있는 소수점 이하)
    3. 자릿수 int를 수집하십시오. 10의 멱수를 이동시킴으로써 부동 소수점 수 소수점 앞에 10.0을 곱하고 새 숫자를 더하고, 소수점을 10의 증가하는 힘으로 나눈 다음 덧셈).
  • +0

    미안하지만 분명하지 않다면 문자열을 사용할 수 없습니다. 나는 오직 한 번에 하나의 문자 또는 숫자 (단지 scanf와 getchar를 사용하는 것으로 제한)를 저장할 수 있습니다 –

    +0

    내 대답, HTH를 업데이 트되었습니다. 이것은 HW 질문이므로 더 많은 도움을 얻으려면 직접 코드를 게시하고 문제가 무엇인지 정확하게 메모해야합니다. –

    +0

    0.123을 구문 분석하려면 "123"부분을 정수로 읽고 한 단계에서 1000으로 나눕니다. 0.1, 0.02 또는 0.003 중 어느 것도 IEEE 754 부동 소수점으로 나타낼 수 없으므로 메서드는 필요한 것보다 더 많은 반올림 오류를 누적합니다. –

    1

    나는 당신이 당신의 대답을 가지고있는 것을 보았습니다. 그러나 이것은 당신에게도 효과가 있습니까?

    #include <stdio.h> 
    
    
    int main() 
    { 
        char *str = new char[30]; 
        float flt; 
        int count = 0; 
    
        scanf("%f", &flt); 
        printf("number you entered is: %f\n", flt); 
        sprintf(str, "%f", flt); 
    
        for(;str[count] != '\0'; count++); 
    
        printf("%f have %d digits", flt, count-1); 
        return 0; 
    }